我想使用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的方式是:
echo
路径。
将PATH的内容复制到文本文件中,然后手动将;C:\Python27\;C:\Python27\Scripts\
添加到PATH的末尾。
将整个内容复制出文本文件。
setx PATH "<paste the string here>"
该过程在Windows 7和Windows 8上每次都有效。
我真的应该能够在一个命令中做到这一点。我在做什么错?
谢谢。
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中的实际值。
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'
以管理员身份运行Powershell
然后
setx /M PATH "$Env:PATH;<path to add>"
要进行验证,请打开另一个Powershell并按如下所示查看PATH,
$Env:PATH
setx
,则可以使用其他命令行工具,例如pathed。 https://superuser.com/questions/297947/is-there-a-convenient-way-to-edit-path-in-windows-7/655712#655712上有更全面的PATH编辑器列表。您还可以直接编辑注册表值,这是setx
所做的。此answer中的更多内容。
奇怪的是,您的%PATH%
被截断为1024个字符。我以为setx
没有这个问题。尽管您可能应该清理无效的路径条目。
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/4717152和https://stackoverflow.com/a/10292113/4717152的组合
使用管理员]。
pathman /as %M2%
例如,将%M2%添加到系统路径。一无所有,一无所有。将用户PATH和系统PATH混合使用不再有问题。几乎不用再尝试从注册表中获取正确的值了...
在Windows 10上尝试过
步骤:1。