有人可以解释这个结果吗?
设置路径后,它没有改变。这是在管理员命令行中运行的:
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`
它没有改变。为什么呢?
答案 0 :(得分:12)
在Windows中,每个进程都获得一个环境副本,该环境本质上是进程启动时全局环境的快照。在进程运行时对全局环境的更改不会传播回进程'自己的环境副本。
要回答实际问题,setx
会修改用户环境(如果使用/M
运行,则会修改系统),但在执行{{1}的进程中,更改不会立即显示在这种情况下setx
。如果您在运行cmd.exe
后打开新命令提示符,则会在 setx
实例中看到更改。
cmd.exe
帮助中明确指出:
在本地系统上,此工具创建或修改的变量将在以后的命令窗口中可用,但在当前的CMD.exe命令窗口中不可用。
要在 全局环境和当前进程中实现相同的更改,您需要运行 setx /?
和{{1 }}