use*_*628 9 windows batch-file environment-variables
我需要从客户端工作站中删除系统变量.我有500多个客户端,所以我想向用户提供批处理文件来运行自己删除系统变量.
bar*_*lop 11
You may want to make these two permanent with setx but obviously no need to
C:\>set uvar=HKCU\Environment
C:\>
C:\>set mvar=HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
C:\>
Run Code Online (Sandbox Code Playgroud)
一些术语
在一个Key(就像一个文件夹)中,你有一个带有一些数据的变量,比如a = 5
http://msdn.microsoft.com/en-us/library/3dwk5axy.aspx 谈到名称(a)具有值(5).
注册表术语在msdn上看起来有点不同,但reg.exe和维基百科似乎是一致的.维基百科http://en.wikipedia.org/wiki/Windows_Registry 说它是"注册表值是存储在密钥中的名称/数据对"会话名称/数据对.名称(a)数据(5)和一对是一个值.
REG似乎使用/ v这可能是指变量名称及其数据(如在维基百科中),它确实显示变量名称及其数据.REG有一个/ d我认为只是数据.
setx的一个例子
C:\>reg query %uvar%
HKEY_CURRENT_USER\Environment
TEMP REG_EXPAND_SZ %USERPROFILE%\AppData\Local\Temp
TMP REG_EXPAND_SZ %USERPROFILE%\AppData\Local\Temp
...
C:\>setx aaa 3
C:\>reg query %uvar%
HKEY_CURRENT_USER\Environment
TEMP REG_EXPAND_SZ %USERPROFILE%\AppData\Local\Temp
TMP REG_EXPAND_SZ %USERPROFILE%\AppData\Local\Temp
...
aaa REG_SZ 3
Run Code Online (Sandbox Code Playgroud)
如果您尝试使用setx将其删除,那么您最接近的就是清除它,因为 MS KB文章195050所说的MS KB文章仍然在注册表中.
setx没有从注册表中删除变量
C:\>setx aaa ""
SUCCESS: Specified value was saved.
C:\>reg query %uvar%
HKEY_CURRENT_USER\Environment
TEMP REG_EXPAND_SZ %USERPROFILE%\AppData\Local\Temp
TMP REG_EXPAND_SZ %USERPROFILE%\AppData\Local\Temp
...
aaa REG_SZ
C:\>
Run Code Online (Sandbox Code Playgroud)
值得注意的是,就cmd提示而言,变量已经消失.echo%aaa%将显示%aaa%,因此变量消失了.现在注册表中只有一些不必要的垃圾.
用户提出了一个有趣的观点,现在当您尝试设置系统范围的变量时,它不起作用.因为它被用户变量中的内容覆盖,在这种情况下,它将始终显示为未定义.
C:\>reg delete %uvar% /v aaa
Delete the registry value aaa (Yes/No)? y
The operation completed successfully.
C:\>
Run Code Online (Sandbox Code Playgroud)
请注意,aaa现在已经消失了.下面.
C:\>reg query %uvar%
HKEY_CURRENT_USER\Environment
TEMP REG_EXPAND_SZ %USERPROFILE%\AppData\Local\Temp
TMP REG_EXPAND_SZ %USERPROFILE%\AppData\Local\Temp
...
C:\>
Run Code Online (Sandbox Code Playgroud)
如果要为系统/机器环境变量而不是用户变量执行此操作.
- 下面的行必须来自管理特权cmd提示 -
注意键是HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
- %mvar%(不像%uvar%)需要引号围绕它'因为键有一个空间.如果你错过了报价,那就没什么大不了的,你只是得到一个错误,可能会提醒你使用引号.
- 当然,如果你想在setx的注册表部分设置一个环境变量,请使用例如setx aaa 5 -m,即-m after.
C:\>set mvar=HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
C:\>reg delete "%mvar%" /v aaa
Delete the registry value aaa (Yes/No)? y
The operation completed successfully.
C:\>
Run Code Online (Sandbox Code Playgroud)
进一步说明
您可以使用REG ADD或REG DELETE ...(代替setx)创建环境变量,但无论如何,在设置变量时您可能也想使用set,以便为当前设置会议也不仅仅是下一个.一个链接re setx https://superuser.com/questions/647505/set-enviroment-variable-setx
小智 5
具有空字符串值的 setx 命令不会删除它。这不仅仅是挑剔,因为逻辑完全不同。因为如果用户特定变量覆盖全局变量,则不可能删除用户特定变量并使全局变量再次“变为活动状态”。空字符串用户特定变量会阻止全局变量。需要实际删除它(使用环境变量窗口)才能实现这一目标。
我今天刚刚尝试过这个,全局变量 JAVA_HOME 被用户特定的 JAVA_HOME 覆盖。如果不完全删除用户特定变量,则无法再次激活全局变量。到目前为止,我还没有看到从命令行或批处理脚本执行此操作的方法。
(没有足够的声誉点来添加评论到上面关于 setx 的答案,所以必须添加我自己的答案......)
您需要修改此注册表项:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment
Run Code Online (Sandbox Code Playgroud)
更改在重新启动后生效。
归档时间: |
|
查看次数: |
36984 次 |
最近记录: |