删除环境变量不起作用

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

然后我按照以下步骤操作(双击以确保我每次都开始一个新会话):

  1. 双击 Check variable.cmd,我发现 TestVar 不存在
  2. 双击 Set variable.cmd 显示 SUCCESS: Specified value was saved.
  3. 双击Check variable.cmd,它会显示变量值。好!
  4. 双击 Delete variable.cmd 显示 The operation completed successfully.
  5. 双击Check variable.cmd,它仍然显示变量值。不好!
  6. 点击开始菜单,输入environment,点击Edit environment variables for your account打开Environment Variables对话框,点击OK不做任何改变
  7. 双击Check variable.cmd,变量不再存在

我在第2步后能在注册表中找到该值,在第4步后找不到,但第5步仍能找到。即使我不做任何更改,第 6 步也会真正删除变量。

启动时读取注册表。当程序启动时,它会获得其父环境的副本,通常是 Explorer.exe 的环境。

如评论所述,资源管理器(或任何其他对消息起作用的图形程序)如果从其他程序(如 setx)收到消息警告它注册表已更改,则重新读取注册表。

答案很简单

在连续的行上使用 setsetx

您可以使用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