Skip to content

Commit

Permalink
支持执行顺序
Browse files Browse the repository at this point in the history
  • Loading branch information
PowerWordTree committed Dec 28, 2023
1 parent df90387 commit 505b288
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 36 deletions.
22 changes: 13 additions & 9 deletions History.md
Original file line number Diff line number Diff line change
@@ -1,19 +1,23 @@
# 更新历史

## 0.3.0 / 2023-12-28

- 支持执行顺序, 环境变量名可以作为后续的变量使用.

## 0.2.3 / 2023-12-26

- 增加`;`注释符
- 修改 CONFIG 为 MAP 数据结构
- 备份文件与配置文件顺序相同
- 重新整理 Script 脚本调用
- 增加`;`注释符.
- 修改 CONFIG 为 MAP 数据结构.
- 备份文件与配置文件顺序相同.
- 重新整理 Script 脚本调用.

## 0.2.0 / 2023-12-24

- 设置工作目录为配置文件所在目录
- 改换为 Powershell 方式设置环境变量
- 变量前加`_`, 避免`FOR /F`变量名冲突
- 修正特殊字符方面 Bug
- 设置工作目录为配置文件所在目录.
- 改换为 Powershell 方式设置环境变量.
- 变量前加`_`, 避免`FOR /F`变量名冲突.
- 修正特殊字符方面 Bug.

## 0.1.0 / 2023-12-22

初始版本
初始版本.
16 changes: 13 additions & 3 deletions Readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,7 @@

批量添加 Windows 环境变量的工具.

根据配置文件的内容, 对 Windows 环境变量进行设置.

支持头部插入, 支持结尾追加, 支持`%`变量.
根据配置文件, 对 Windows 环境变量进行设置.

## 配置文件

Expand Down Expand Up @@ -56,6 +54,18 @@

配置文件中`%`包裹的变量, 在执行时会被展开, 当前工作目录为配置文件所在目录. 需要保留`%`时, 用`%%`方式进行转义.

### 执行顺序

段执行顺序为: REPLACE -> INSERT -> APPEND

段内执行顺序为配置文件顺序.

执行过程中, 环境变量名可以作为后续的变量使用.

保留变量名: PATH, \_EXIT_CODE, \_OPTION, \_CONFIG, \_CONFIG_OLD, \_KEY, \_VALUE, @\*

应避免使用如下变量: `_`开头的名称, `@`开头的名称, 名称为`PATH`

### 示例

```ini
Expand Down
48 changes: 24 additions & 24 deletions WinEnv.cmd
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
::环境变量管理
::@author FB
::@version 0.2.3
::@version 0.3.0

::Script:Argument.Parser.CMD::
::Script:Config.FileRead.CMD::
Expand All @@ -22,13 +22,13 @@ SET "_EXIT_CODE=0"
::解析参数
CALL Argument.Parser.CMD "_ARG" %*
IF "%_ARG.OPTION.O%" == "1" (
SET "OPTION=/D 1 /T 0"
SET "_OPTION=/D 1 /T 0"
) ELSE IF "%_ARG.OPTION.O%" == "2" (
SET "OPTION=/D 2 /T 0"
SET "_OPTION=/D 2 /T 0"
) ELSE IF "%_ARG.OPTION.O%" == "3" (
SET "OPTION=/D 3 /T 0"
SET "_OPTION=/D 3 /T 0"
) ELSE (
SET "OPTION="
SET "_OPTION="
)
IF "%_ARG.PARAM.0%" == "" (
SET "_CONFIG=%~n0.ini"
Expand Down Expand Up @@ -65,7 +65,7 @@ IF /I "%_ARG.OPTION.H%" == "TRUE" (
ECHO - /h ^| -h
ECHO 显示帮助
ECHO.
SET "OPTION=ANY"
SET "_OPTION=ANY"
GOTO :EXIT
)
::选择菜单
Expand All @@ -76,7 +76,7 @@ ECHO 1:
ECHO 2:恢复环境变量
ECHO 3:退出
ECHO.
CHOICE /C:123 %OPTION% /M "请选择:"
CHOICE /C:123 %_OPTION% /M "请选择:"
GOTO :OP_%ERRORLEVEL%

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Expand All @@ -92,49 +92,48 @@ IF NOT EXIST "%_CONFIG%" (
GOTO :EXIT
)
CALL Config.FileRead.CMD "_CONFIG" "%%_CONFIG%%"
FOR /F "usebackq delims=" %%A IN (`SET "_CONFIG." 2^>NUL`) DO (CALL SET "%%~A")
::备份环境变量
CALL Map.New.CMD "_CONFIG_OLD"
CALL Map.Put.CMD "_CONFIG_OLD" "SCOPE" "%%_CONFIG.SCOPE%%"
CALL Map.Put.CMD "_CONFIG_OLD" "SCOPE" "%_CONFIG.SCOPE%"
CALL Map.NewChild.CMD "_CONFIG_OLD" "REPLACE"
FOR %%A IN ("REPLACE","APPEND","INSERT") DO (
FOR %%A IN ("REPLACE","INSERT","APPEND") DO (
FOR /F "usebackq delims=" %%I IN (
`CALL Map.List.CMD "_CONFIG.%%~A" "{0}"`
) DO (
SET "_KEY=%%~I"
CALL SET "_KEY=%%~I"
CALL Environment.Get.CMD "%%_KEY%%" "%%_CONFIG.SCOPE%%" || SET "@=(Removed)"
CALL String.Replace.CMD "%%@%%" "%%%%" "%%%%%%%%"
CALL Map.Put.CMD "_CONFIG_OLD.REPLACE" "%%_KEY%%" "%%@%%"
)
)
FOR /F "usebackq delims=" %%A IN (`SET "_CONFIG_OLD." 2^>NUL`) DO (
SET "_STR=%%~A" & CALL String.Replace.CMD "%%_STR%%" "%%%%" "%%%%%%%%"
CALL SET "%%@%%"
)
CALL Config.FileWrite.CMD "_CONFIG_OLD" "%%_CONFIG_OLD%%"
::设置环境变量
FOR /F "tokens=1,* usebackq delims==" %%A IN (
`CALL Map.List.CMD "_CONFIG.REPLACE" "{0}={1}"`
) DO (
SET "_KEY=%%~A" & SET "_VALUE=%%~B"
CALL SET "%%~A=%%~B"
CALL SET "_KEY=%%~A" & CALL SET "_VALUE=%%~B"
CALL ECHO %%_KEY%%=%%_VALUE%%
IF /I "%%~B" == "(Removed)" SET "_VALUE="
CALL Environment.Set.CMD "%%_KEY%%" "%%_VALUE%%" "%%_CONFIG.SCOPE%%"
)
FOR /F "tokens=1,* usebackq delims==" %%A IN (
`CALL Map.List.CMD "_CONFIG.APPEND" "{0}={1}"`
`CALL Map.List.CMD "_CONFIG.INSERT" "{0}={1}"`
) DO (
SET "_KEY=%%~A" & SET "_VALUE=%%~B"
CALL SET "%%~A=%%~B%%%%~A%%"
CALL SET "_KEY=%%~A" & CALL SET "_VALUE=%%~B"
CALL Environment.Get.CMD "%%_KEY%%" "%%_CONFIG.SCOPE%%"
CALL SET "_VALUE=%%@%%%%_VALUE%%"
CALL SET "_VALUE=%%_VALUE%%%%@%%"
CALL ECHO %%_KEY%%=%%_VALUE%%
CALL Environment.Set.CMD "%%_KEY%%" "%%_VALUE%%" "%%_CONFIG.SCOPE%%"
)
FOR /F "tokens=1,* usebackq delims==" %%A IN (
`CALL Map.List.CMD "_CONFIG.INSERT" "{0}={1}"`
`CALL Map.List.CMD "_CONFIG.APPEND" "{0}={1}"`
) DO (
SET "_KEY=%%~A" & SET "_VALUE=%%~B"
CALL SET "%%~A=%%%%~A%%%%~B"
CALL SET "_KEY=%%~A" & CALL SET "_VALUE=%%~B"
CALL Environment.Get.CMD "%%_KEY%%" "%%_CONFIG.SCOPE%%"
CALL SET "_VALUE=%%_VALUE%%%%@%%"
CALL SET "_VALUE=%%@%%%%_VALUE%%"
CALL ECHO %%_KEY%%=%%_VALUE%%
CALL Environment.Set.CMD "%%_KEY%%" "%%_VALUE%%" "%%_CONFIG.SCOPE%%"
)
Expand All @@ -156,7 +155,8 @@ FOR /F "usebackq delims=" %%A IN (`SET "_CONFIG_OLD." 2^>NUL`) DO (CALL SET "%%~
FOR /F "tokens=1,* usebackq delims==" %%A IN (
`CALL Map.List.CMD "_CONFIG_OLD.REPLACE" "{0}={1}"`
) DO (
SET "_KEY=%%~A" & SET "_VALUE=%%~B"
CALL SET "%%~A=%%~B"
CALL SET "_KEY=%%~A" & CALL SET "_VALUE=%%~B"
CALL ECHO %%_KEY%%=%%_VALUE%%
IF /I "%%~B" == "(Removed)" SET "_VALUE="
CALL Environment.Set.CMD "%%_KEY%%" "%%_VALUE%%" "%%_CONFIG_OLD.SCOPE%%"
Expand All @@ -166,7 +166,7 @@ GOTO :EXIT
:OP_3
:OP_0
:EXIT
IF "%OPTION%" == "" (
IF "%_OPTION%" == "" (
ECHO.
ECHO 按任意键结束……
PAUSE >NUL
Expand Down

0 comments on commit 505b288

Please sign in to comment.