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 和许多其他语言使用。)\
转义可能会导致引用的目录路径出现问题,其中包含
尾随反斜杠,因为行尾的结束引号 "
将被转义\"。
要保存带有尾部反斜杠 (\) 的目录路径,需要添加
'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\
==>
Invalid syntax 错误与第一次使用 SETX PATH "%PATH%" 作为用户级环境变量优先于机器级环境变量导致的用户级 %PATH% 变量损坏有关。要解决这个问题,首先调整用户级别%PATH%变量(或完全删除)via Windows GUI (preferred):
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
第 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"
==>