删除环境variables不起作用

为什么用reg delete HKCU\Environment /F /V TestVar一个环境variablesreg delete HKCU\Environment /F /V TestVar Windows 7 Professional中的reg delete HKCU\Environment /F /V TestVar将其从registry中删除,但该variables仍然存在?

以下是详细信息:我创build了以下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并显示variables值。 好!
  4. 双击Delete variable.cmd ,它说The operation completed successfully.
  5. 双击Check variable.cmd ,它仍然显示variables值。 坏!
  6. 点击开始菜单,inputenvironment ,点击Edit environment variables for your accountEnvironment Variables ,打开Environment Variables对话框,点击OK不用改变任何东西
  7. 双击Check variable.cmd ,variables不再存在

我可以在步骤2后findregistry中的值,在步骤4后找不到它,但步骤5仍然可以find它。 即使我什么也没有改变,第6步真的删除了variables。

这是解决我的问题。 我不知道这是否是正确的解决方案,但它适用于我:

检查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不能用来删除一个变量,就像这里所说的那样,但是在用reg delete从注册表中reg delete一个变量之后,它就会丢失广播。

编辑

我添加了一行来从注册表中删除DummyVarUsedToDelete 。 这不会被播放,但这是一个小的暂时的问题。

您可以使用setx删除一个环境变量,这将广播正确的消息:

 setx TestVar "" reg delete HKCU\Environment /F /V TestVar 

(正如在注释中所讨论的那样,使用setx本身会在注册表中留下一个空的条目,为了保持一致性,应该删除它。)

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

正如评论所说,资源管理器(或任何其他图形程序,作用于消息),如果它从其他程序(如setx)得到一个消息,警告它注册表已被更改,重新读取注册表。

答案很简单

在顺序行上使用setsetx