有人能解释一下这个结果吗?
设置路径后,它没有改变。这是在管理员命令行中运行的:
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变量。我看到的是机器路径+管理员的路径吗?
已经看了其他文章的主题,但仍然困惑。
我是否应该清除用户路径,以避免重复?
update:回复提示“此工具创建或修改的变量将在以后的命令窗口中可用”,打开非管理员窗口,输入:
>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`
它没有改变。为什么?
4条答案
按热度按时间ds97pgxw1#
在Windows中,每个进程都会获得一个环境副本,该副本实际上是进程启动时全局环境的快照。进程运行时 * 对全局环境的更改不会传播回进程自己的环境副本。
为了回答实际的问题,
setx
确实修改了用户环境(或者如果使用/M
运行,则修改了系统环境),但是这些更改在执行setx
的进程(在本例中为cmd.exe
)中不会立即可见。如果在运行setx
后打开 new 命令提示符,您将看到cmd.exe
的 that 示例中的更改。这在
setx /?
帮助中有明确说明:在本地系统上,此工具创建或修改的变量将在以后的命令窗口中可用,但在当前的CMD.exe命令窗口中不可用。
要在全局环境和当前进程中实现相同的更改,您需要同时运行
setx
和set
。bjp0bcyl2#
只是一个FYI为任何人找到这个旧职位...
SETX(以及通过PowerShell、.Net、C#等的大多数其他编程方法)仅对运行SETX的用户运行的新进程立即生效。如果SETX由其他用户或系统帐户运行(大多数企业部署产品都是如此),则任何其他用户仍需要重新启动才能接收更新。即使关闭Explorer.exe并在受影响的用户下重新运行也不会刷新。
当您通过标准Windows GUI修改环境变量时,Microsoft正在对shell环境进行一些编程魔术。
htzpubme3#
首先,以管理员身份打开cmd,然后运行setx命令
mznpcxlj4#
根据文档,setx命令实际上只反映下一个终端会话中的更改。
要立即反映在同一终端中,您只需通过赋值更改变量的值。
准备好了