为什么以下命令可以正常运行:
set PATH=C:\Program Files (x86)\Path\With whitespaces\
if defined APP_HOME set PATH=.;%PATH%
但如果我用括号使用“if”,则会出现错误“\ Path \ With此时出乎意料”
set PATH=C:\Program Files (x86)\Path\With whitespaces\
if defined APP_HOME (
set PATH=.;%PATH%
)
答案 0 :(得分:5)
)
字符有时是特殊的,有时不是。
如果有效(
,则下一个未加引号,未转义的)
将关闭该块。
如果没有活动的(
,那么命令参数中的未加引号的,未转义的)
将被视为文字。
您的PATH变量包含)
,它会过早关闭您的IF块。在您的情况下,可以通过在作业周围添加引号来修复它。
set PATH=C:\Program Files (x86)\Path\With whitespaces\
if defined APP_HOME (
set "PATH=.;%PATH%"
)
但要小心。有时PATH包含已引用的路径。如果在PATH中已有引号,则将赋值括在引号中可能会破坏赋值。
无论当前的定义是什么,这都是一种为PATH添加值的简单方法。该代码假设最初禁用延迟扩展。
set PATH=C:\Program Files (x86)\Path\With whitespaces\
if defined temp (
setlocal enableDelayedExpansion
for /f "eol=: delims=" %%P in ("!path!") do endlocal & set "PATH=.;%%P"
)