echo %PATH%
如果您的(机器级别)
%path%
以反斜杠 (
backslash) 结尾,您应该将其加倍,如下所示:
if "%path:~-1%"=="\" (
SETX PATH "%PATH%\"
) else (
SETX PATH "%PATH%"
)
资源: 语法: 转义字符、分隔符和引号 (请注意以下引文中我自己的重点):
一些命令(例如REG
和FINDSTR
)使用标准的转义字符\
(与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\
==>
Invalid syntax
错误与用户级别的%PATH%
变量损坏有关,这是由于首次使用SETX PATH "%PATH%"
作为用户级别环境变量优先于机器级别环境变量所导致的。要解决此问题,首先要调整用户级别的%PATH%
变量(或完全删除它)通过Windows GUI(首选):
控制面板 | 系统 | 高级 | 环境变量
证明 - 重现问题需要两步:
第一步:从机器级别的良好%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"
==>
;
结尾,如果不是的话,就以文件夹名称的结尾为准,但绝对不是以 \ 结尾。此外,在撰写本文时,用户级别上不存在PATH
变量。 - octopod