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%

事实上,我确信它以一个
结尾,如果不是的话,则以文件夹名称结尾,但肯定不是以\结尾。此外,在撰写本文时,在用户级别上不存在
路径
变量。