windows - 如何在 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\
解决方案
由于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
回运行其他代码之前的旧值。它必须在代码的末尾。
进一步阅读
推荐阅读
- jquery - reactjs状态变化时如何正确更新jquery数据表内容?
- java - org.springframework.beans.factory.BeanCreationException:创建工厂bean时出错
- solidity - Metamask 自定义 RPC 未发送正确的合约信息
- android - Android - 毕加索获取图像高度
- python - 如何更改网页代码打开的目录TCP服务器python
- html - 如何使 firstChild 高度为 100% flexbox 包装项目
- firebase - Firebase 不会更新我对自定义域的更改
- mongodb - Mongodb Compass和shell中的mongodb查找聚合结果不同
- r - Taking values from data table rows and putting it in a cell as a list in R
- c# - 通过 RestSharp C# 将 JSON 数组发布到 PHP API