在 Windows 10 中通过命令行操作用户和系统环境变量

在 Windows 10 中通过命令行操作用户和系统环境变量

我一直使用以下命令来设置/删除用户/系统环境变量:

系统:

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"

后来我发现了这些局限性:

  1. 如果%PATH%太长,我会收到以下警告,并且%PATH%变量会被截断:

警告:正在保存的数据被截断为 1024 个字符。

  1. 正如命令帮助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_USERHKLM可与 互换HKEY_LOCAL_MACHINE。)

(请注意,CMD将空环境变量与不存在的环境变量视为相同。不过,我明白您正在尝试从系统中清除变量。)

相关内容