首页 > 解决方案 > 如何在 Windows 中重置/删除使用 setx 设置的环境变量?

问题描述

初始状态:ABC_HOME C:\abc\bin\

批处理文件的开始 setx ABC_HOME "%ABC_HOME%;E:\newAbc\abc\bin\"
....
在适当的执行后
*What is the command*- 运行此命令以获得最终状态。

最终状态:ABC_HOME C:\abc\bin\

标签: windowsbatch-fileenvironment-variablescommand-line-tool

解决方案


由于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%将设置ABC_HOME回运行其他代码之前的旧值。它必须在代码的末尾。

进一步阅读


推荐阅读