【问题标题】:Why are user environment variables sometimes not expanded?为什么用户环境变量有时不展开?
【发布时间】:2015-09-01 10:59:06
【问题描述】:

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

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

第一个打印出bar。其他打印%FOO%

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

【问题讨论】:

  • 我无法复制它。我在“双击 cmd”和“右键单击->打开 cmd”版本中都扩展了 var。
  • 虽然涉及的变量是%path%,但我认为this在这种情况下是相关的
  • @MarcB 我没有管理员权限。尝试使用受限帐户登录,看看是否可以复制这种方式。
  • 我没有设置系统环境变量,只是为每个用户设置一个。还是您的意思是“右键单击->打开”,就像打开管理外壳一样?
  • 对不起@MarcB,有时很难清楚地解释自己关于这些事情。 Shift+右键单击 是对我如何打开第二个 cmd 窗口的参考。也就是说:在 Windows 资源管理器中,当我按住 shift 键的同时右键单击一个文件夹,会出现一个上下文菜单,允许我在此处打开命令窗口。我确实不是的意思是右键单击->以管理员身份运行。我也没有设置系统变量,只是一个用户变量。

标签: windows-7 cmd environment-variables


【解决方案1】:

我正在解决同样的问题。

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 /run 但它保留了旧环境。

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

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

还在寻找。

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

这里的命令提示符继承了资源管理器的旧环境。

taskkill /im explorer.exe /f
start explorer

然后一个新的上下文菜单命令提示符在这里应该可以工作。

【讨论】:

  • MSalters 确实回答了我的部分问题,但我看到的最丰富的答案是在我原始问题的 cmets 中发布的 linkMC ND。我会接受这个答案,因为它继续为上下文菜单方法提出解决方案。但是,出于我自己的目的,我想我会接受失败并使用有效的提示以老式方式导航到文件夹。在我的特定情况下,终止进程和更改注册表值实际上不会让生活更方便。
  • 好的。 “在单独的进程中启动文件夹”可能是问题所在。 serverfault.com/questions/694629/… 但我看过类似的帖子,其中“解决方案”实际上是启动一个新的资源管理器或 cmd 提示符,而不是他们做了什么。
【解决方案2】:

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

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

SETX FOO bar

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

【讨论】:

  • 我从控制面板设置变量(问题已更新)。
  • 使用 setx 确实会在会话之间保留变量,但在我的情况下,该变量仍然不会在 新打开的上下文菜单 cmd 会话中展开。
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-19
    • 2023-01-13
    • 2010-10-12
    • 1970-01-01
    • 2016-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多