我无法使用PATH
永久设置全局环境变量SETX
。
我已阅读Invalid syntax with setx等类似问题的答案,并阅读SS64上的语法。
据我所知,以下行正确遵循SETX
的语法,并且 NOT 中包含两个以上的参数:
SETX PATH "%PATH%"
但这并不能阻止SETX
给我这个错误:
ERROR: Invalid syntax. Default option is not allowed more than '2' time(s).
Type "SETX /?" for usage.
以上命令在cmd.exe
的管理员实例上运行。使问题更加陌生的原因是cmd.exe
用户实例上的完全相同。
我简化了上面的命令以强调问题,但我真正想要运行的是:
SETX PATH "%PATH%;D:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin" /M
当然,这会产生同样的错误,我无法在cmd.exe
的用户实例上运行它,因为我试图设置全局环境变量PATH
permenantly。 (需要管理员访问权限)
答案 0 :(得分:7)
echo %PATH%
如果您的(机器级别)%path%
以尾随\
反向固定(反斜杠)结尾,则应将其加倍,如下所示:
if "%path:~-1%"=="\" (
SETX PATH "%PATH%\"
) else (
SETX PATH "%PATH%"
)
资源:Syntax : Escape Characters, Delimiters and Quotes(请注意以下引文中我自己的要点):
某些命令(例如
REG
和FINDSTR
)使用标准转义字符\
的句子(由C,Python,SQL,bash和许多其他语言使用。)\
转义可能导致包含a的带引号的目录路径出现问题 尾部反斜杠,因为该行末尾的结束引用"
将被转义\"
。要保存带有反斜杠(
\
)的目录路径,需要添加 第二个反斜杠'逃避逃脱' 所以例如代替"C:\My Docs\"
使用"C:\My Docs\\"
关于尾随\
的上述陈述也适用于 SETX
。这是一个例子:
==>set myPath
myPath=D:\Program Files\OgreSDK\
==>setx myOgre "%myPath%"
SUCCESS: Specified value was saved.
==>reg query HKEY_CURRENT_USER\Environment /v myOgre
HKEY_CURRENT_USER\Environment
myOgre REG_SZ D:\Program Files\OgreSDK"
==>setx myOgre "%myPath%\"
SUCCESS: Specified value was saved.
==>reg query HKEY_CURRENT_USER\Environment /v myOgre
HKEY_CURRENT_USER\Environment
myOgre REG_SZ D:\Program Files\OgreSDK\
==>
Invalid syntax
错误与首次使用%PATH%
导致的用户级SETX PATH "%PATH%"
变量有关,因为用户级环境变量优先于计算机级别1。要解决此问题,请先调整用户级%PATH%
变量(或根本删除它){/ 3}}:
Control Panel | System | Advanced | Environment Variables
证明 - 通过两个步骤重现问题:
步骤1:从机器级别的良好%myPath%
变量开始,尾随\
;最后(罚款)为当前用户级别和exit
cmd
会话打破了此变量。
==>set myPath
myPath=D:\temp\foo foo\
==>reg query HKEY_CURRENT_USER\Environment /v myPath
ERROR: The system was unable to find the specified registry key or value.
==>reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v myPath
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
myPath REG_SZ D:\temp\foo foo\
==>setx myPath "%myPath%;D:\temp\bu bu bu"
SUCCESS: Specified value was saved.
==>reg query HKEY_CURRENT_USER\Environment /v myPath
HKEY_CURRENT_USER\Environment
myPath REG_SZ D:\temp\foo foo\;D:\temp\bu bu bu
==>rem fetch erroneous state
==>setx myPath "%myPath%"
SUCCESS: Specified value was saved.
==>reg query HKEY_CURRENT_USER\Environment /v myPath
HKEY_CURRENT_USER\Environment
myPath REG_SZ D:\temp\foo foo"
==>exit
步骤2:在新的cmd
会话中,从用户级别的%myPath%
变量开始,尾随"
;这引发了所讨论的错误。
==>set myPath
myPath=D:\temp\foo foo"
==>reg query HKEY_CURRENT_USER\Environment /v myPath
HKEY_CURRENT_USER\Environment
myPath REG_SZ D:\temp\foo foo"
==>reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v myPath
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
myPath REG_SZ D:\temp\foo foo\
==>setx myPath "%myPath%;D:\temp\bu bu bu"
ERROR: Invalid syntax. Default option is not allowed more than '2' time(s).
Type "SETX /?" for usage.
==>reg query HKEY_CURRENT_USER\Environment /v myPath
HKEY_CURRENT_USER\Environment
myPath REG_SZ D:\temp\foo foo"
==>
答案 1 :(得分:1)
以下为我工作:
第1步:
setx PATH "%PATH%;%GOPATH%bin"
我收到了以下回复:
WARNING: The data being saved is truncated to 1024 characters.
SUCCESS: Specified value was saved.
另一个更简单的例子可能是:
setx PATH "%PATH%;C:\Go\bin"
第2步:
重新启动命令行,以查看新路径设置
echo %PATH%
答案 2 :(得分:0)
这意味着它已经在路径中了(我已经和setx战斗了几天,这是愚蠢的)。
您可以添加相同的现有条目或添加新条目而不会出错,但不能添加其他条目。每个用户的路径为空白,每台机器的路径不为空。