【问题标题】:Why is setx path not working?为什么 setx 路径不起作用?
【发布时间】:2016-05-22 17:00:08
【问题描述】:

谁能解释一下这个结果?

设置路径后,它没有改变。这是在管理员命令行中运行的:

C:\Windows\system32>setx path "C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\ProgramData\chocolatey\bin;D:\Program Files (x86)\Microsoft VS Code\bin"

SUCCESS: Specified value was saved.

C:\Windows\system32>path
PATH=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\ProgramData\chocolatey\bin;D:\Program Files (x86)\Microsoft VS Code\bin;D:\Program Files (x86)\metapad36;D:\Program Files (x86)\metapad36" /M

我读过 %PATH% = 机器的 PATH 变量 + 用户的 PATH 变量。我看到的是机器路径 + 管理员的路径吗?

看过有关该主题的其他文章,但仍然感到困惑。

我应该清除用户路径,以免重复吗?

更新:重新提示“此工具创建或修改的变量将在以后的命令窗口中可用”我打开一个非管理员窗口并输入:

>path
PATH=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\ProgramData\chocolatey\bin;D:\Program Files (x86)\Microsoft VS Code\bin;;D:\Program Files (x86)\metapad36;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\ProgramData\chocolatey\bin;D:\Program Files (x86)\Microsoft VS Code\bin

路径重复两次。好的,然后在同一提示下,我 setx 没有重复的路径,也没有 /M

>setx path "C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\ProgramData\chocolatey\bin;D:\Program Files (x86)\Microsoft VS Code\bin"

SUCCESS: Specified value was saved.

显然保存在当前用户环境中。

然后我打开一个 非管理员命令窗口,然后:

>path
PATH=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\ProgramData\chocolatey\bin;D:\Program Files (x86)\Microsoft VS Code\bin;;D:\Program Files (x86)\metapad36;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\ProgramData\chocolatey\bin;D:\Program Files (x86)\Microsoft VS Code\bin`

它没有改变。为什么?

【问题讨论】:

  • 如果“重复”来自系统变量,您还需要 setx /M 更正后的 path(当然,在提升的 cmd 提示符下)。更改path 的用户值不会删除path 的系统值中定义的条目。
  • 听起来您是在说在 非管理员 命令行上输入的path 返回系统范围的路径,而不是用户级别 i> 路径。真的吗?我注意到在 non-Admin 命令行上输入 path 返回的结果与在 Admin 命令行上输入的 path 不同。但是如果两种情况都返回系统路径,为什么它们不同?谢谢
  • 不,你误会了。您只需要提升的提示符就可以让setx /M 被允许更改系统环境变量path。除此之外,提升(以管理员身份运行)和常规(非提升)cmd 提示具有相同的环境。请注意,PATH 特别是系统 PATH + 用户 PATH 的组合,例如,请参见 Environment variables in Windows NTThe User path is appended to the system path. 如果您以某种方式将两者设置为相同的值,则生成的 PATH 将包含您所看到的重复项。跨度>

标签: windows path environment-variables


【解决方案1】:

在 Windows 中,每个进程都会获得一份环境副本,该副本本质上是进程启动时全局环境的快照。进程运行时对全局环境的更改不会传播回进程自己的环境副本。

为了回答实际问题,setx 确实修改了用户环境(如果使用/M 运行,则修改系统环境),但这些更改在执行setx 的进程中不会立即可见,在这种情况下是@ 987654325@。如果您在运行setx 后打开new 命令提示符,您将看到cmd.exe那个 实例的变化。

setx /? 帮助中明确指出了这一点:

在本地系统上,此工具创建或修改的变量将在以后的命令窗口中可用,但在当前的 CMD.exe 命令窗口中不可用。

要在 both 全局环境和当前进程之一中实现相同的更改,您需要运行 both setxset

【讨论】:

  • 我有类似的情况,但是在设置环境变量中,在以管理员身份运行的 shell 和注册表中(当前用户和系统范围的变量)PATH 是可以的,因为我在注册表编辑器。即使在重新启动后 $Env:PATHecho %path% 显示重复的路径。 Setx 成功执行,但后续 shell 实例没有任何变化,set 仅更改当前 shell 会话的 PATH。如何让我的 PATH 同步?
  • @Yar 没有任何细节很难猜到。首先要检查的是每次更改后的用户和机器环境,例如参见here。如果这与您的预期不符,您应该发布一个单独的问题,其中包含重现问题的确切步骤。
猜你喜欢
  • 2014-11-20
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 2014-10-08
  • 2013-03-21
  • 2013-10-20
  • 2013-01-31
  • 2014-08-28
相关资源
最近更新 更多