初始状态:ABC_HOME C:\abc\bin\
批处理文件的开始setx ABC_HOME "%ABC_HOME%;E:\newAbc\abc\bin\"
…
在适当的执行之后*What is the command*
-运行此命令以获取最终状态。
最终状态:ABC_HOME C:\abc\bin\
最佳答案
因为ABC_HOME
是在批处理文件开始之前定义的,所以我们可以简单地设置一个临时变量来存储旧值:
SET OLD_ABC_HOME=%ABC_HOME%
setx ABC_HOME "%ABC_HOME%;E:\newAbc\abc\bin\"
<your code here>
setx ABC_HOME %OLD_ABC_HOME%
但是,如果在同一批处理文件中多次使用
setx
,则必须查询注册表以获取更新的值,以便可以使用以下内容:setx ABC_HOME C:\abc\bin\
FOR /F "tokens=2* delims= " %%a IN ('reg query HKCU\Environment /v ABC_HOME') DO SET OLD_ABC_HOME=%%b
setx ABC_HOME "%ABC_HOME%;E:\newAbc\abc\bin\"
<your code here>
setx ABC_HOME %OLD_ABC_HOME%
原因是
setx
不适用于运行它的cmd.exe
实例的环境。解释
reg query HKCU\Environment /v ABC_HOME
使用windows注册表获取ABC_HOME
变量的值,因为这在批处理环境中不可用。FOR /F "tokens=2* delims= " %%a IN ('...') DO
将遍历reg query
命令的输出并将其分成三部分。delims=
将空间字符设置为分隔输出的分隔符
指定要分割输出的部分。第二部分将进入tokens=2*
变量,第三部分和之后的所有部分将进入%%a
变量。这样,变量就可以包含空格。%%b
将设置包含SET OLD_ABC_HOME=%%b
内容的临时环境变量。ABC_HOME
将把setx ABC_HOME %OLD_ABC_HOME%
设置回运行其他代码之前的值。它一定在代码的末尾。进一步阅读
Reg - SS64.com
Setx - SS64.com
Set - SS64.com
For (command) - SS64.com
Internal commands (like
ABC_HOME
) - SS64.com关于windows - 如何在Windows中使用setx重置/删除环境变量集?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56493949/