为什么用户环境变量有时不展开?

Why are user environment variables sometimes not expanded?

我通过控制面板设置了一个用户环境变量 FOO=bar。

然后我打开 2 cmd windows。第一个来自开始按钮,另一个来自我工作目录的上下文(shift+右键单击)菜单,然后键入 echo %FOO%.

第一个打印 bar。另一个打印 %FOO%

为什么输出不同&有没有办法从每个 cmd 访问用户环境变量window?

用户环境变量是继承的。每个进程在创建时从其父进程获取它们。更改它们将影响当前进程及其 future 子进程。

你是如何设置变量的? 我相信您可能将其设置为 "CMD variable",该范围仅对当前会话有效。

对于持久变量,您应该使用 SETX 命令:

SETX FOO bar

请访问以下链接了解 SET 和 SETX 命令之间的详细信息:

我正在处理同样的问题。

c:\SetX test NOT
c:\echo test=%test% fail.
test= fail.

c:\start %comspec%
Microsoft Wind..er..DOS [Version 6.1.7601]
c:\echo test=%test% fail.
test= fail.

Start -> run -> cmd
echo test=%test% fail.
test=NOT fail.

win-r 宏可以工作,但更喜欢安静/非侵入式解决方案。

我尝试使用 schtasks /运行 但它保留了旧环境。

可能有一个使用新环境启动的命令。

Nirsoft 或 sysinternals 可能有一些东西...

仍在寻找。

*** MSalters 正确回答了 OP,继承问题。

此处的命令提示符继承了资源管理器的旧环境

taskkill /im explorer.exe /f
start explorer

那么新的上下文菜单命令提示符应该可以工作了。