批处理脚本:为什么这个条件评估为真?

使用以下内容创build一个batch file

@echo off setlocal echo %1 if [%1] == [] echo hi 

然后从命令提示符运行它,如下所示:

 script.cmd == 

它会输出以下内容:

 ECHO is off. hi 

为什么是这样的,这是怎么发生的? 另外,如何更可靠地检查批处理脚本中的空string?

谢谢。

在这种情况下,我建议使用以下内容:

 @echo off setlocal echo(%~1 if "%~1"=="" echo hi 

而不是script.cmd ==使用script.cmd "=="

请注意,我使用了echo(如果变量被看作是空的,它将会回显一个换行符,而且我用%~1%1参数中删除了周围的引号。

你需要周围的引号,因为等号在参数中被当作一个分隔符 ,除非在引号内,就像空格一样。

 @ECHO OFF SETLOCAL SET "cmdtail=%*" ECHO(%cmdtail% IF "%cmdtail%"=="==" ECHO two "=" 

但回到原来的问题。

请注意,该语法将检测作为命令尾部提供的== ,而%~1不会计算为==