windows 未使用的 if 块中出现批处理语法错误

windows batch syntax error in a not used if block

如果我不提供任何参数,为什么以下批处理脚本在 Windows 7 上失败并出现 "The syntax of the command is incorrect." 错误:

IF NOT [%1]==[] (
echo "blablabla" > %1
) ELSE (
echo "please provide argument"
)

但是这段代码没有问题:

IF NOT [%1]==[] (
echo "blablabla"
) ELSE (
echo "printing not existing argument: %1"
)

提前致谢

问题是整个if/else块被一次性读取和解析。所以如果 %1 为空,重定向 > 仍然被解析和评估无效。

您可以像这样解决问题:

if not "%~1"=="" (
  goto :Redirect
) else (
  echo please provide argument
)
goto :Continue
:Redirect
> "%~1" echo blablabla
:Continue

我用引号替换了方括号,因为它们可以保护空格和其他特殊字符。 ~ 符号确保返回的参数不带引号,因此表达式 "%~1".

中始终有一对引号

此外,我还从 echo 命令行中删除了引号,因为它们也被输出了,并且我将重定向部分 > "%~1" 移到了 echo 前面以避免尾随SPACE待退。

用双引号括起文件名强制 if/else 块正确解析和读取表达式。

例如

IF NOT [%1]==[] (
echo "blablabla" > "%1"
) ELSE (
echo "please provide argument"
)