删除环境变量不起作用
Deleting environment variables doesn't work
为什么在Windows 7 Professional中删除一个带有reg delete HKCU\Environment /F /V TestVar
的环境变量,将其从注册表中删除,但该变量仍然存在?
详情如下:我创建了以下 3 .cmd
个文件:
勾选variable.cmd
echo TestVar = %TestVar%
pause
设置variable.cmd
setx TestVar 123
pause
删除variable.cmd
reg delete HKCU\Environment /F /V TestVar
pause
然后我按照以下步骤操作(双击以确保我每次都开始一个新会话):
- 双击
Check variable.cmd
,我发现 TestVar
不存在
- 双击
Set variable.cmd
显示 SUCCESS: Specified value was saved.
- 双击
Check variable.cmd
,它会显示变量值。好!
- 双击
Delete variable.cmd
显示 The operation completed successfully.
- 双击
Check variable.cmd
,它仍然显示变量值。不好!
- 点击开始菜单,输入
environment
,点击Edit environment variables for your account
打开Environment Variables
对话框,点击OK
不做任何改变
- 双击
Check variable.cmd
,变量不再存在
我在第2步后能在注册表中找到该值,在第4步后找不到,但第5步仍能找到。即使我不做任何更改,第 6 步也会真正删除变量。
启动时读取注册表。当程序启动时,它会获得其父环境的副本,通常是 Explorer.exe 的环境。
如评论所述,资源管理器(或任何其他对消息起作用的图形程序)如果从其他程序(如 setx)收到消息警告它注册表已更改,则重新读取注册表。
答案很简单
在连续的行上使用 set
和 setx
。
您可以使用setx
删除环境变量,这将广播正确的消息:
setx TestVar ""
reg delete HKCU\Environment /F /V TestVar
(正如评论中所讨论的,单独使用 setx
会在注册表中留下一个空条目,为了保持一致性,应将其删除。)
这是我的问题的解决方案。我不知道这是否是正确的解决方案,但它对我有用:
勾选variable.cmd
set TestVar
@pause
设置variable.cmd
setx TestVar 123
@pause
删除variable.cmd
reg delete HKCU\Environment /F /V TestVar
setx DummyVarUsedToDelete ""
reg delete HKCU\Environment /F /V DummyVarUsedToDelete
@pause
setx
不能用于删除变量,如 here 所述,但在使用 reg delete
.[= 从注册表中删除变量后,它会执行丢失的广播17=]
编辑
我添加了一行以从注册表中删除 DummyVarUsedToDelete
。这个就不播了,暂时是个小问题
正在删除系统路径变量
方法一:
set var = C:\Users\mahidhai\cygwin64\usr\local\bin
REG delete "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /F /V var
就我而言,即使我 运行 作为管理员,它也不起作用。
命令提示符显示错误注册表项未找到
在这种情况下,直接转到注册表项文件
方法二:
Go To register editor .
Run -> regedit
NAvigate to
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
直接编辑注册码,点击注册码名称。
这应该可以正常工作
方法三:
Sometimes not updated windows could be the issue . Check if any updates available . If so update immediately
为什么在Windows 7 Professional中删除一个带有reg delete HKCU\Environment /F /V TestVar
的环境变量,将其从注册表中删除,但该变量仍然存在?
详情如下:我创建了以下 3 .cmd
个文件:
勾选variable.cmd
echo TestVar = %TestVar%
pause
设置variable.cmd
setx TestVar 123
pause
删除variable.cmd
reg delete HKCU\Environment /F /V TestVar
pause
然后我按照以下步骤操作(双击以确保我每次都开始一个新会话):
- 双击
Check variable.cmd
,我发现TestVar
不存在 - 双击
Set variable.cmd
显示SUCCESS: Specified value was saved.
- 双击
Check variable.cmd
,它会显示变量值。好! - 双击
Delete variable.cmd
显示The operation completed successfully.
- 双击
Check variable.cmd
,它仍然显示变量值。不好! - 点击开始菜单,输入
environment
,点击Edit environment variables for your account
打开Environment Variables
对话框,点击OK
不做任何改变 - 双击
Check variable.cmd
,变量不再存在
我在第2步后能在注册表中找到该值,在第4步后找不到,但第5步仍能找到。即使我不做任何更改,第 6 步也会真正删除变量。
启动时读取注册表。当程序启动时,它会获得其父环境的副本,通常是 Explorer.exe 的环境。
如评论所述,资源管理器(或任何其他对消息起作用的图形程序)如果从其他程序(如 setx)收到消息警告它注册表已更改,则重新读取注册表。
答案很简单
在连续的行上使用 set
和 setx
。
您可以使用setx
删除环境变量,这将广播正确的消息:
setx TestVar ""
reg delete HKCU\Environment /F /V TestVar
(正如评论中所讨论的,单独使用 setx
会在注册表中留下一个空条目,为了保持一致性,应将其删除。)
这是我的问题的解决方案。我不知道这是否是正确的解决方案,但它对我有用:
勾选variable.cmd
set TestVar
@pause
设置variable.cmd
setx TestVar 123
@pause
删除variable.cmd
reg delete HKCU\Environment /F /V TestVar
setx DummyVarUsedToDelete ""
reg delete HKCU\Environment /F /V DummyVarUsedToDelete
@pause
setx
不能用于删除变量,如 here 所述,但在使用 reg delete
.[= 从注册表中删除变量后,它会执行丢失的广播17=]
编辑
我添加了一行以从注册表中删除 DummyVarUsedToDelete
。这个就不播了,暂时是个小问题
正在删除系统路径变量
方法一:
set var = C:\Users\mahidhai\cygwin64\usr\local\bin
REG delete "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /F /V var
就我而言,即使我 运行 作为管理员,它也不起作用。 命令提示符显示错误注册表项未找到
在这种情况下,直接转到注册表项文件
方法二:
Go To register editor .
Run -> regedit
NAvigate to
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
直接编辑注册码,点击注册码名称。
这应该可以正常工作
方法三:
Sometimes not updated windows could be the issue . Check if any updates available . If so update immediately