Windows有setx命令:
Description:
Creates or modifies environment variables in the user or system
environment.
所以你可以这样设置一个变量:
setx FOOBAR 1
你可以像这样清除这个值:
setx FOOBAR ""
但是,该变量不会被删除。它保留在注册表中:
那么如何移除变量呢?
Windows有setx命令:
Description:
Creates or modifies environment variables in the user or system
environment.
所以你可以这样设置一个变量:
setx FOOBAR 1
你可以像这样清除这个值:
setx FOOBAR ""
但是,该变量不会被删除。它保留在注册表中:
那么如何移除变量呢?
当前回答
要从当前命令会话中删除变量而不永久删除它,使用常规的内置set命令-在等号后面不放任何东西:
设置FOOBAR =
要确认,请执行不带参数的set命令并检查当前环境。该变量应该从列表中完全消失。
注意:这只会从当前环境中删除变量-它不会将更改保存到注册表中。当启动一个新的命令进程时,该变量将返回。
其他回答
要从当前命令会话中删除变量而不永久删除它,使用常规的内置set命令-在等号后面不放任何东西:
设置FOOBAR =
要确认,请执行不带参数的set命令并检查当前环境。该变量应该从列表中完全消失。
注意:这只会从当前环境中删除变量-它不会将更改保存到注册表中。当启动一个新的命令进程时,该变量将返回。
DougWare回答中的命令并没有起作用,但这个却起了作用:
reg delete "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v FOOBAR /f
快捷方式HKLM可用于HKEY_LOCAL_MACHINE。
顺便说一下,我刚刚算出了如何用setx取消设置的永久变量。
简单地写引号,比如:
setx myvar ""
并在下一个cmd窗口重新启动,如果你搜索变量
set myvar
不会有任何安排。
从当前环境中删除变量(不是永久地):
set FOOBAR=
要永久地从用户环境中删除变量(这是setx放置它的默认位置):
REG delete HKCU\Environment /F /V FOOBAR
如果变量是在系统环境中设置的(例如,如果您最初使用setx /M设置它),作为管理员运行:
REG delete "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /F /V FOOBAR
注意:上面的REG命令不会影响任何现有进程(以及从现有进程中派生出来的一些新进程),因此,如果更改对立即生效很重要,那么最简单、最可靠的方法就是注销并重新登录或重新启动。如果这不是一个选择,或者您想深入挖掘,这里的一些其他答案有一些很好的建议,可能适合您的用例。
在PowerShell中,您可以使用.NET [System.Environment]::SetEnvironmentVariable()方法:
删除名为FOO的用户环境变量。 [Environment]::SetEnvironmentVariable('FOO', $null, 'User')
注意,$null用于更好地表示删除变量的意图,尽管在这种情况下,从技术上讲,它实际上与传递''相同。
要删除名为FOO -的系统(机器级)环境变量,需要提升(必须以管理员身份运行): [Environment]::SetEnvironmentVariable('FOO', $null, 'Machine')
除了更快的执行速度外,与基于reg.exe的方法相比,它的优点是其他应用程序会通过WM_SETTINGCHANGE消息得到更改通知——虽然很少有应用程序会真正侦听该消息并更新它们的环境作为响应,但Windows (GUI) shell会,因此随后通过文件资源管理器/从桌面/任务栏/开始菜单启动的应用程序会看到更新后的环境。