如何使用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的唯一可靠的方式如下:
-
echo
PATH。 -
将PATH的内容复制到文本文件中,并手动将PATH的末尾添加
;C:\Python27\;C:\Python27\Scripts\
。 -
将整个文件复制到文本文件中。
-
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%”