如何使用setx将其添加到Windows PATH变量中?有奇怪的问题

问题描述 投票:69回答:10

我想使用setx修改Windows PATH变量。在Windows 8上,以下至少50%的时间有效:

setx PATH %PATH%;C:\Python27\;C:\Python27\Scripts\

如果出现错误“默认参数只能使用2次,则在某些情况下可以使用以下内容:

setx PATH "%PATH%;C:\Python27\;C:\Python27\Scripts\"

区别在于我们将第二个参数用引号引起来。我相信当%PATH%扩展为包含空格时,引号是必需的。

但是,我在Windows 7上遇到了一些奇怪的问题。在一台特定的Windows 7计算机上,我遇到了这个问题:

echo %PATH%

它打印:

C:\Foo\;C:\Bar\;[...lots of stuff...]C:\Baz\

然后我这样做:

setx PATH "%PATH%;C:\Quux\"

然后说“错误:被截断为1,024个字符。”现在,让我们检查一下PATH包含什么:

echo %PATH%

它打印:

C:\Foo\;C:\Foo\;C:\Bar\;C:\Bar\;[...lots of stuff, now duplicated...]C:\B

...,并且被截断为1,024个字符。由于重复,它跑了过来。同样有趣的是:尽管setx引发了错误并且没有说“成功”,但PATH的值仍在变化。

我能够多次重复这种奇怪的行为(幸运的是,我已经保存了PATH的原始内容)。

目前,我知道将唯一附加到PATH的方式是:

  1. echo路径。

  2. 将PATH的内容复制到文本文件中,然后手动将;C:\Python27\;C:\Python27\Scripts\添加到PATH的末尾。

  3. 将整个内容复制出文本文件。

  4. setx PATH "<paste the string here>"

该过程在Windows 7和Windows 8上每次都有效。

我真的应该能够在一个命令中做到这一点。我在做什么错?

谢谢。

windows path cmd setx
10个回答
69
投票
以管理员身份运行cmd,然后:

setx /M PATH "%PATH%;<your-new-path>"

/ M选项将变量设置为SYSTEM范围。默认行为是为USER设置它。

TL; DR

出现截断问题是因为当您回显%PATH%时,它将显示SYSTEM和USER值的串联。因此,当您将其添加到setx的第二个参数中时,它将适合USER变量中的SYSTEM和USER值。当您再次回声时,事情将会加倍。

此外,/ M选项需要管理员特权,因此您需要使用“以管理员身份运行”打开终端,否则setx将抱怨“拒绝访问注册表路径”。

最后要注意:以这种方式设置后,在回显%PATH%后,您将不会看到新值,您需要关闭cmd,然后再次打开。

如果要检查存储在注册表检查this question中的实际值。


0
投票
这不直观,但效果很好:

13
投票
这很完美:

for /f "usebackq tokens=2,*" %A in (`reg query HKCU\Environment /v PATH`) do set my_user_path=%B setx PATH "C:\Python27;C:\Python27\Scripts;%my_user_path%"

第一个命令将USER环境变量'PATH'转换为'my_user_path'变量第二行在'C:\ Python27; C:\ Python27 \ Scripts;'之前到USER环境变量'PATH'

5
投票
如果有人想在PowerShell中运行它,如下所示,

以管理员身份运行Powershell

然后

setx /M PATH "$Env:PATH;<path to add>"

要进行验证,请打开另一个Powershell并按如下所示查看PATH,

$Env:PATH


4
投票
如果您不了解setx,则可以使用其他命令行工具,例如pathedhttps://superuser.com/questions/297947/is-there-a-convenient-way-to-edit-path-in-windows-7/655712#655712上有更全面的PATH编辑器列表。

您还可以直接编辑注册表值,这是setx所做的。此answer中的更多内容。

奇怪的是,您的%PATH%被截断为1024个字符。我以为setx没有这个问题。尽管您可能应该清理无效的路径条目。


4
投票
没有管理员权限,对我有用的唯一方法是一个包含以下代码的bat文件:

for /F "tokens=2* delims= " %%f IN ('reg query HKCU\Environment /v PATH ^| findstr /i path') do set OLD_SYSTEM_PATH=%%g setx PATH "%USERPROFILE%\wev-tools;%OLD_SYSTEM_PATH%"

代码是答案https://stackoverflow.com/a/45566845/4717152https://stackoverflow.com/a/10292113/4717152的组合

3
投票
我遇到了同样的问题,现在找到了一个简单的解决方案。

使用管理员]。

pathman /as %M2%

例如,将%M2%添加到系统路径。一无所有,一无所有。将用户PATH和系统PATH混合使用不再有问题。几乎不用再尝试从注册表中获取正确的值了...

在Windows 10上尝试过


0
投票

步骤:1。


0
投票
[%PATH%环境变量接近1024个字符,我写了一个Powershell脚本来修复它时,我在管理计算机实验室时遇到了麻烦。

0
投票
使用OOTB工具感到遗憾,您不能直接/轻松地添加系统路径或用户路径。如果要使用OOTB工具,则必须查询SYSTEM或USER路径,将该值另存为变量,然后追加添加的内容并使用setx保存。下面的两个示例显示了如何检索,保存它们以及附加您的添加内容。不要与%PATH%混为一谈,它是USER + SYSTEM的串联,将导致结果重复很多。您必须按如下所示拆分它们...
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.