为什么setx路径不起作用?

时间:2016-02-11 18:41:14

标签: windows path environment-variables

有人可以解释这个结果吗?

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

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`

它没有改变。为什么呢?

1 个答案:

答案 0 :(得分:12)

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

要回答实际问题,setx会修改用户环境(如果使用/M运行,则会修改系统),但在执行{{1}的进程中,更改不会立即显示在这种情况下setx。如果您在运行cmd.exe后打开命令提示符,则会在 setx实例中看到更改。

cmd.exe帮助中明确指出:

  

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

要在 全局环境和当前进程中实现相同的更改,您需要运行 setx /?和{{1 }}