如何通过命令提示符永久更新系统PATH变量?

44

这里所讨论,我们可以使用setx

setx PATH "%PATH%;C:\Something\bin"

但这个命令只能改变用户的 PATH 变量,而不能改变系统的。

我们怎样才能创建一个类似的系统级别的命令呢?

图片描述


6个回答

48

输入setx /?来获取基本命令帮助。您将轻松发现:

/M                     Specifies that the variable should be set in
                       the system wide (HKEY_LOCAL_MACHINE)
                       environment. The default is to set the
                       variable under the HKEY_CURRENT_USER
                       environment.

你需要在管理员权限的命令提示符下运行此命令。右键点击 cmd 的快捷方式,选择 以管理员身份运行

例如:

setx /M PATH "%PATH%;C:\Something\bin"

注意:

我们可能会破坏当前系统的PATH变量。在修改它之前,请确保备份其值。


3
setx 相比,pathman 更适合用于路径的操作,因为它专门设计用于此目的。特别是,使用 setx 会破坏带有嵌入式环境变量引用的路径,而 pathman 没有这个问题(据我所知)。 - Harry Johnston
2
某人肯定会说:“哇,这个编辑框太小了,我可以修复它!”这是非常有意的(是的,Intel,你也一样)。这与setx毫无关系。 - Hans Passant
@HarryJohnston请把你的答案单独放在一个地方,以便进行审查和接受,如果那显示出更好的解决方案。 - Nam G VU
6
setx 命令可能会将值截断为1024个字符(至少在我使用 Windows 7 Enterprise x64 SP1 时是这样)。 - Zarepheth
1
为避免截断,请使用此答案 https://dev59.com/Z2Qm5IYBdhLWcg3w6SdR#37304698 - Michal Tsadok
1
这是错误的。它修改了合并的系统用户"Path"值,并将其作为系统值设置回去。这样会造成混乱,并且丢失了对“Path”中引用其他变量的REG_SZ注册表值的精心实现。(不引用其他变量的变量被设置为REG_SZ值。它们在重新加载环境时在REG_EXPAND_SZ值之前加载,所以在"Path"中使用它们是安全的。)单独使用setx.exe 不能足以更新PATH。它必须与reg.exe结合使用,并且实现这一点的批处理代码很复杂。 - Eryk Sun

16

来自PowerShell

setx /M PATH "$($env:path);c:\program files\mynewprogram"

4

解决处理>1024个字符的路径的方法:

其他答案在我的情况下都没有起作用,但使用pathed很有用。您可以像这样简单地添加到路径:

pathed /append C:\Path\To\Be\Added /machine

您可以运行以下命令来检查编辑是否正确:

pathed

提示:如果您想更改用户路径,请改用:pathed /append C:\Path\To\Be\Added /user,并使用pathed /user检查是否正确执行。

另外,为了能够从终端运行pathed,请将exe文件放在已经在您的路径中的目录中(或者添加一个新路径,但是您可能需要打开一个新的cmd.exe实例才能识别新路径)。


2

%PATH%存在的一个问题是它包含了用户的路径。如果您不介意使用Powershell,您可以运行以下命令:

$p = [Environment]::GetEnvironmentVariable("PATH", [EnvironmentVariableTarget]::Machine);
[Environment]::SetEnvironmentVariable("PATH", $p + ";C:\MyPath", [EnvironmentVariableTarget]::Machine);

1
如果您想在用户级别上将一些位置添加到PATH环境变量中,请在命令行上使用以下命令:
setx PATH ^%PATH^%;"C:\Program Files\Something\bin"

为什么会有奇怪的语法? 首先,您不希望扩展系统PATH变量,而是将其保留为符号,否则您将无法参与将来对系统PATH变量的添加。因此,您必须使用^引用%字符。

如果您在命令脚本中使用此功能,则必须使用双%%代替^%。

"括起来的字符串包含空格。如果没有空格,可以省略引号。

添加的字符串必须直接跟在后面,没有空格,这样整个字符串就形成了setx命令的单个参数。


尽管可能是唯一的CMD解决方案,但应避免使用setx,如此SO答案所述。请使用正确获取的机器与用户PATH的管理员PowerShell。 - not2qubit

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接