3

为什么以下命令可以正常工作:

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

1 回答 1

5

这个)角色有时很特别,有时没有。

如果有一个 active (,那么下一个未引用、未转义)的将关闭该块。

如果没有 active (,则在命令参数中未加引号、未转义)将被简单地视为文字。

您的 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"
)
于 2012-12-19T18:09:11.630 回答