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

Vol*_*lyy 3 cmd batch-file

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

set PATH=C:\Program Files (x86)\Path\With whitespaces\
if defined APP_HOME set PATH=.;%PATH%
Run Code Online (Sandbox Code Playgroud)

但是如果我用括号使用"if"那么有错误"\ Path\With此时意外"

set PATH=C:\Program Files (x86)\Path\With whitespaces\
if defined APP_HOME ( 
   set PATH=.;%PATH%
)
Run Code Online (Sandbox Code Playgroud)

dbe*_*ham 5

)角色有时是特殊的,有时没有.

如果存在活动状态(,则下一个未引用的,未转义的)将关闭该块.

如果没有活动的(,那么)在命令参数中的未引用的,未转义的将被简单地视为文字.

您的PATH变量包含)过早关闭IF块的PATH变量.在您的情况下,可以通过在作业周围添加引号来修复它.

set PATH=C:\Program Files (x86)\Path\With whitespaces\
if defined APP_HOME ( 
   set "PATH=.;%PATH%"
)
Run Code Online (Sandbox Code Playgroud)

不过要小心.有时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"
)
Run Code Online (Sandbox Code Playgroud)