首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么setx路径不工作?

为什么setx路径不工作?
EN

Stack Overflow用户
提问于 2016-02-11 18:41:14
回答 3查看 21.4K关注 0票数 11

有人能解释一下这个结果吗?

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

代码语言:javascript
复制
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 % =用于机器的路径变量+用户的路径变量。我看到机器路径+管理员路径了吗?

看过其他关于这个话题的文章,但还是很困惑。

我应该清除用户路径,这样就没有重复了吗?

update:关于“由该工具创建或修改的变量将在未来的命令窗口中可用”的提示:我打开了一个非管理窗口并输入:

代码语言:javascript
复制
>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

代码语言:javascript
复制
>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.

显然保存在当前的用户环境中。

然后打开一个新的非管理命令窗口,并且:

代码语言:javascript
复制
>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`

它并没有改变。为什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-02-11 23:18:30

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

为了回答实际问题,setx确实修改了用户环境(如果使用/M运行的话,也可以修改系统环境),但是在执行setx的过程中,这些更改并不是立即可见的,在本例中是cmd.exe。如果在运行setx之后打开一个新的命令提示符,您将看到cmd.exe实例中的更改。

setx /?帮助中明确指出了这一点:

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

要在全局环境和当前进程中进行相同的更改,您需要同时运行setxset

票数 21
EN

Stack Overflow用户

发布于 2022-04-08 19:15:44

任何找到这个旧职位的人..。

SETX (以及通过PowerShell、.Net、C#等的大多数其他编程方法)只对运行SETX的用户运行的新进程立即生效。如果SETX由不同的用户或系统帐户运行(就像大多数corp部署产品一样),任何其他用户仍需要重新启动才能接收更新。即使关闭Explorer.exe并在受影响的用户下重新运行,也不会刷新。

当您通过标准的Windows修改环境变量时,Microsoft正在对shell环境执行一些编程魔术。

票数 2
EN

Stack Overflow用户

发布于 2022-10-12 11:34:25

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35347451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档