我一直使用以下命令来设置/删除用户/系统环境变量:
系统:
setx -m PATH "%PATH%C:\Program Files\Git\cmd;C:\Program Files\Git\mingw64\bin;C:\Program Files\Git\usr\bin;"
用户:
setx VAR1 "CONTENT OF VAR1"
后来我发现了这些局限性:
- 如果
%PATH%
太长,我会收到以下警告,并且%PATH%
变量会被截断:
警告:正在保存的数据被截断为 1024 个字符。
- 正如命令帮助
setx
所说:
使用 Setx.exe 清除环境变量值时,环境变量名称不受影响
换句话说,当我运行时setx -m OCVLIBDIR ""
,它OCVLIBDIR
不会被删除,而是被清空。
我怎样才能克服这些限制?
PS:我更喜欢 Windows 10 本身的工具(例如 PowerShell),但使用第三方工具也没有问题(尽管在我看来这有点小题大做)。
PPS:我知道可以通过 Windows GUI、寄存器或某些第三方 GUI 工具编辑变量,但我更喜欢脚本,因为我可以编写多个场景并在它们之间快速切换。当我在我的系统上试验各种库时,这很有用(例如各种版本的 opencv 等)。
答案1
电源外壳
这篇 TechNet 文章描述基础知识。
这个答案描述获取系统与用户环境变量(这在第一篇文章中只是暗示过)。"Machine"
对于系统,"User"
对于当前用户,"Process"
对于当前进程,用于获取最终的系统/用户组合。
在 PowerShell 连接中讨论了这个问题及其答案。您可以使用+
来连接字符串,或者像 一样使用替换"{0} {1}" -f "Hello","World"
。
括号用于将构造组合在一起。
变量无类型、未声明,并且以 开头$
。
把所有这些放在一起,你会得到如下结果:
$path = [Environment]::GetEnvironmentVariable("PATH","User")
[Environment]::SetEnvironmentVariable("PATH",$path+";C:\Temp","User")
或者用一行代码来表达:
[Environment]::SetEnvironmentVariable("PATH",([Environment]::GetEnvironmentVariable("PATH","User"))+";C:\Temp","User")
本文描述如何删除环境变量($null
是一个特殊变量):
[Environment]::SetEnvironmentVariable("MyTestVariable",$null,"User")
通过这种方式对环境变量的改变是全局有效的。
命令
reg.exe
可以添加、更改和删除注册表项。环境变量位于注册表中。这个答案讨论使用reg
删除环境变量。
对于用户环境变量:
reg DELETE HKCU\Environment /v envvarname
对于系统环境变量:
reg DELETE "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v envvarname
(HKCU
可与 互换HKEY_CURRENT_USER
。HKLM
可与 互换HKEY_LOCAL_MACHINE
。)
(请注意,CMD
将空环境变量与不存在的环境变量视为相同。不过,我明白您正在尝试从系统中清除变量。)