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"
)
如果我不提供任何参数,为什么以下批处理脚本在 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"
)