如果变量中有空格,则带有括号的“if”不起作用

时间:2012-12-19 17:33:36

标签: batch-file cmd

为什么以下命令可以正常运行:

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%
)

1 个答案:

答案 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"
)