初始状态:第一个月在批处理文件中,变量被更改:
setx ABC_HOME "%ABC_HOME%;E:\newAbc\abc\bin\"
我怎样才能回到状态ABC_HOME C:\abc\bin\?
ABC_HOME C:\abc\bin\
qxgroojn1#
由于ABC_HOME是在批处理文件开始之前定义的,我们可以简单地设置一个临时变量来存储旧值:
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
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示例的环境。
cmd.exe
reg query HKCU\Environment /v ABC_HOME
FOR /F "tokens=2* delims= " %%a IN ('...') DO
reg query
delims=
tokens=2*
%%a
%%b
SET OLD_ABC_HOME=%%b
setx ABC_HOME %OLD_ABC_HOME%
SET
xkftehaa2#
要取消设置环境变量,请使用以下语法:
set "ABC_HOME="
2条答案
按热度按时间qxgroojn1#
由于
ABC_HOME
是在批处理文件开始之前定义的,我们可以简单地设置一个临时变量来存储旧值:但是,如果您在同一批处理文件中多次使用
setx
,则必须查询注册表以获得更新后的值,因此可以使用如下代码:原因是
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%
会将ABC_HOME
设置回运行其他代码之前的旧值。它必须位于代码的末尾。进一步阅读
SET
) - SS64.comxkftehaa2#
要取消设置环境变量,请使用以下语法: