当只有两个参数时,具有两个以上参数的"setx"语法无效

oct*_*pod 6 cmd environment-variables setx windows-8.1

我无法PATH永久设置全局环境变量SETX.

我读过类似的问题的答案,如与SETX无效的语法以及阅读语法SS64.

据我所知,以下行遵循的语法SETX正确,也不要有两个以上的论点是:

SETX PATH "%PATH%"
Run Code Online (Sandbox Code Playgroud)

但这并不止于SETX给我这个错误:

ERROR: Invalid syntax. Default option is not allowed more than '2' time(s).
Type "SETX /?" for usage.
Run Code Online (Sandbox Code Playgroud)

上面的命令是在管理员实例上运行的cmd.exe.使问题更加陌生的原因是,cmd.exe同一命令的用户实例上工作完美.

我简化了上面的命令以强调问题,但我真正想要运行的是:

SETX PATH "%PATH%;D:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin" /M
Run Code Online (Sandbox Code Playgroud)

当然,这给出了相同的确切错误,我不能在用户实例上运行它,cmd.exe因为我试图PATH永久地设置全局环境变量.(需要管理员访问权限)

Jos*_*efZ 7

 echo %PATH%
Run Code Online (Sandbox Code Playgroud)

如果您的(机器级别)%path%以尾随\反向固相(反斜杠)结束,则应将其加倍,如下所示:

if "%path:~-1%"=="\" (
   SETX PATH "%PATH%\"
) else (
   SETX PATH "%PATH%"
)
Run Code Online (Sandbox Code Playgroud)

资源:语法:转义字符,分隔符和引号(请在以下引文中注明我自己的亮点):

一些命令(例如REGFINDSTR)使用的标准转义字符\(13759 C,Python中,SQL,bash和许多其他语言.)的\ 逃逸会导致与包含斜杠因为闭引号引用目录路径问题"在端该行将被转义\".

要保存带有反斜杠(\)的目录路径,需要添加第二个反斜杠来"转义转义",例如代替 "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\

==>
Run Code Online (Sandbox Code Playgroud)

Invalid syntax错误与%PATH%首次使用SETX PATH "%PATH%"因用户级环境变量优先于机器级别1 引起的用户级别变量损坏有关.要解决此问题,请%PATH%首先通过Windows GUI(首选)调整用户级别变量(或根本删除它):

Control Panel | System | Advanced | Environment Variables

证明 -分两步重现问题:

步骤#1:%myPath%在机器级别上以良好的变量开始跟踪\; 最后(精细)打破了这个变量的当前用户级别和exitcmd会话.

==>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
Run Code Online (Sandbox Code Playgroud)

步骤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"

==>
Run Code Online (Sandbox Code Playgroud)