如何使用setx添加到Windows PATHvariables? 有奇怪的问题

我想用setx修改Windows PATHvariables。 以下工作至less在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 

…以1024个字符截断。 它由于重复而运行。 同样有趣的是:尽pipesetx提出了一个错误,并没有说“成功”,PATH的价值也发生了变化。

我可以多次重复这种奇怪的行为(幸运的是我保存了PATH的原始内容)。

目前,我知道追加PATH的唯一可靠的方式如下:

  1. echo PATH。

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

  3. 将整个文件复制到文本文件中。

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

该过程每次都在Windows 7和Windows 8上运行。

我真的应该可以用一个命令来做到这一点。 我究竟做错了什么?

谢谢。

以pipe理员身份运行cmd ,然后:

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

/ M选项在SYSTEM范围内设置variables。 默认行为是为USER设置。

TL; DR

截断问题的发生是因为当你回显%PATH%时,它将显示SYSTEM和USER值的串联。 所以,当你将它添加到你的第二个参数的setx,它将适合SYSTEM VAR和USER内的用户值。 当你再次呼应,事情将会翻倍。

此外,/ M选项需要pipe理员权限,因此您需要以“以pipe理员身份运行”打开terminal,否则setx会抱怨“访问registrypath被拒绝”。

最后需要注意的是:只要按照这种方式设置回显%PATH%,就不会看到新值,需要closurescmd并再次打开。

如果你想检查存储在registry中的实际值检查这个问题 。

这完美地工作:

 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环境variables'PATH'到'my_user_path'variables第二行预置'C:\ Python27; C:\ Python27 \ Scripts;' 到USER环境variables'PATH'

如果你不setx ,你可以使用像setx的替代命令行工具。 在https://superuser.com/questions/297947/is-there-a-convenient-way-to-edit-path-in-windows-7/655712#655712有一个更全面的替代path编辑器列表;

您也可以直接编辑registry值,这是setx所做的。 更多在这个答案 。

奇怪的是你的%PATH%被截断了1024个字符。 我以为setx没有这个问题。 尽pipe您应该清理无效path条目。

我面临同样的问题,现在find了一个简单的解决scheme。

使用pathman。

 pathman /as %M2% 

将例如%M2%添加到系统path。 没有更多,也没有less。 没有更多的问题得到用户PATH和系统PATH的混合。 没有更难以尝试从registry中获得正确的值…

尝试在Windows 10

如果有人想在PowerShell中运行它,

以pipe理员身份运行Powershell

然后

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

要validation,打开另一个Powershell并查看PATH如下,

 $Env:PATH 

当%PATH%环境variables接近1024个字符时,我在pipe理我的计算机实验室时遇到了这样的麻烦,我写了一个Powershell脚本来修复它。

您可以在这里下载代码: https : //gallery.technet.microsoft.com/scriptcenter/Edit-and-shorten-PATH-37ef3189

您也可以将其用作安全地添加,移除和分析PATH条目的简单方法。 请享用。

步骤:1.使用pipe理员权限打开命令提示符。

步骤:2.运行命令:setx / M PATH“path \ to;%PATH%”

[注意:一定要改变命令,使path \来反映你的根目录下的文件夹path。]

例如 :setx / M PATH“C:\ Program Files;%PATH%”