windows 为什么setx path不工作?

tpgth1q7  于 2023-04-13  发布在  Windows
关注(0)|答案(4)|浏览(252)

有人能解释一下这个结果吗?
设置路径后,它没有改变。这是在管理员命令行中运行的:

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`

它没有改变。为什么?

ds97pgxw

ds97pgxw1#

在Windows中,每个进程都会获得一个环境副本,该副本实际上是进程启动时全局环境的快照。进程运行时 * 对全局环境的更改不会传播回进程自己的环境副本。
为了回答实际的问题,setx确实修改了用户环境(或者如果使用/M运行,则修改了系统环境),但是这些更改在执行setx的进程(在本例中为cmd.exe)中不会立即可见。如果在运行setx后打开 new 命令提示符,您将看到cmd.exethat 示例中的更改。
这在setx /?帮助中有明确说明:
在本地系统上,此工具创建或修改的变量将在以后的命令窗口中可用,但在当前的CMD.exe命令窗口中不可用。
要在全局环境和当前进程中实现相同的更改,您需要同时运行setxset

bjp0bcyl

bjp0bcyl2#

只是一个FYI为任何人找到这个旧职位...
SETX(以及通过PowerShell、.Net、C#等的大多数其他编程方法)仅对运行SETX的用户运行的新进程立即生效。如果SETX由其他用户或系统帐户运行(大多数企业部署产品都是如此),则任何其他用户仍需要重新启动才能接收更新。即使关闭Explorer.exe并在受影响的用户下重新运行也不会刷新。
当您通过标准Windows GUI修改环境变量时,Microsoft正在对shell环境进行一些编程魔术。

htzpubme

htzpubme3#

首先,以管理员身份打开cmd,然后运行setx命令

mznpcxlj

mznpcxlj4#

根据文档,setx命令实际上只反映下一个终端会话中的更改。
要立即反映在同一终端中,您只需通过赋值更改变量的值。

$env:VAR_test = "test value"

准备好了

相关问题