Cmd 带“的语法无效”;setx";当只有两个参数时,有两个以上的参数
我无法使用Cmd 带“的语法无效”;setx";当只有两个参数时,有两个以上的参数,cmd,environment-variables,windows-8.1,setx,Cmd,Environment Variables,Windows 8.1,Setx,我无法使用SETX永久设置全局环境变量PATH 我已经阅读了类似问题的答案,例如,以及上的语法 据我所知,以下行正确地遵循了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的管理员实例上运行
SETX
永久设置全局环境变量PATH
我已经阅读了类似问题的答案,例如,以及上的语法
据我所知,以下行正确地遵循了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
。(需要管理员访问)这意味着它已经在路径中了(我已经和setx打了好几天了,这太愚蠢了)
可以添加相同的现有条目,也可以添加新条目,但不能添加其他条目。每个用户的路径为空,每台计算机的路径不为空
echo %PATH%
如果您的(机器级)%path%
以尾随的\
反向索利多金币(反斜杠)结尾,则应按如下方式将其加倍:
if "%path:~-1%"=="\" (
SETX PATH "%PATH%\"
) else (
SETX PATH "%PATH%"
)
参考资料:(在下面的引文中记下我自己的亮点):
某些命令(例如REG
和FINDSTR
)使用标准转义字符
属于\
(由C、Python、SQL、bash和许多其他语言使用)。\
转义可能会导致包含
尾随反斜杠,因为行尾的结束引号“
将被转义\“
要保存带有尾随反斜杠(\
)的目录路径,需要添加
“escape the escape”的第二个反斜杠,例如,而不是
“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\
==>
无效语法
错误与用户级%PATH%
变量中断有关,该变量是由于首次使用SETX PATH“%PATH%”
作为用户级环境变量优先于机器级环境变量而导致的。要解决此问题,请首先调整用户级别%PATH%
变量(或将其删除):
控制面板|系统|高级|环境变量
验证-分两步重现问题:
步骤1:从机器级别的良好%myPath%
变量开始,尾随\
;最后(很好)为当前用户级别中断此变量,并退出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步:
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"
第二步:
重新启动命令行,以查看新的路径设置
echo %PATH%
事实上,我确信它以一个;
结尾,如果不是的话,则以文件夹名称结尾,但肯定不是以\结尾。此外,在撰写本文时,在用户级别上不存在路径
变量。