删除环境变量不起作用

ste*_*nci 3 windows registry cmd environment-variables

为什么reg delete HKCU\Environment /F /V TestVar在 Windows 7 Professional 中删除环境变量会将其从注册表中删除,但该变量仍然存在?

以下是详细信息:我创建了以下 3 个.cmd文件:

检查变量.cmd

echo TestVar = %TestVar%
pause
Run Code Online (Sandbox Code Playgroud)

设置变量.cmd

setx TestVar 123
pause
Run Code Online (Sandbox Code Playgroud)

删除变量.cmd

reg delete HKCU\Environment /F /V TestVar
pause
Run Code Online (Sandbox Code Playgroud)

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

  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 步确实会删除变量。

ste*_*nci 5

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

检查变量.cmd

set TestVar
@pause
Run Code Online (Sandbox Code Playgroud)

设置变量.cmd

setx TestVar 123
@pause
Run Code Online (Sandbox Code Playgroud)

删除变量.cmd

reg delete HKCU\Environment /F /V TestVar
setx DummyVarUsedToDelete ""
reg delete HKCU\Environment /F /V DummyVarUsedToDelete
@pause
Run Code Online (Sandbox Code Playgroud)

setx不能用于删除变量,解释在这里,但它确实变后失踪的广播已经从注册表中删除reg delete

编辑

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