有人可以解释这个结果吗?
设置路径后,它没有改变。这是在管理员命令行中运行的:
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`
它没有改变。为什么?
最佳答案
在Windows中,每个进程都获得该环境的副本,该副本本质上是该进程启动时全局环境的快照。流程运行时对全局环境的更改不会传播回流程自己的环境副本。
为了回答实际问题,setx
确实修改了用户环境(如果使用/M
运行,则修改了用户环境),但是所做的更改在执行setx
的过程中(在本例中为cmd.exe
)并不立即可见。如果在运行setx
后打开新的命令提示符,您将看到cmd.exe
实例中的更改。setx /?
帮助中明确指出了这一点:
要在全局环境和当前进程之一中进行相同的更改,您需要同时运行setx
和set
。