批处理脚本:为什么此条件评估为true?

时间:2016-04-03 15:33:33

标签: windows batch-file cmd windows-10 command-prompt

使用以下内容创建批处理文件:

@echo off
setlocal

echo %1
if [%1] == [] echo hi

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

script.cmd ==

它将输出以下内容:

ECHO is off.
hi

为什么会这样,它是如何发生的?另外,如何在批处理脚本中更可靠地检查空字符串?

感谢。

2 个答案:

答案 0 :(得分:2)

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

@echo off
setlocal

echo(%~1
if "%~1"=="" echo hi

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

请注意,我使用了echo(,如果变量被视为空,则会回显换行符,并且我使用%~1删除%1参数中的周围引号。

你需要周围的引号,因为equal-sign is treated as a delimeter in the arguments,除非在引号内,就像空格一样。

答案 1 :(得分:1)

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

但回到未说明的原始问题。

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