批处理文件:两个连续的 IF

Batch file: Two consecutive IFs

我正在尝试理解批处理文件中 IF 的语法。

鉴于此代码(有效):

CHOICE /C YN /M "Do it?"
IF ERRORLEVEL == 2 GOTO skip
IF ERRORLEVEL == 1 GOTO doIt
GOTO end

:doIt
echo Do it!
GOTO end

:skip
echo Abort!
GOTO end

:end

为什么我不能更改两个 IF 的顺序?如果我一开始写 IF ERRORLEVEL == 1 GOTO doIt ,我会得到错误的行为。现在 Do it 每次都会执行,无论输入如何。

if command 支持一些特殊的(不区分大小写)关键字:

  • exist(检查文件是否存在)
  • defined(检查环境变量)
  • ErrorLevel(检查最后一个错误)
  • CmdExtVersion(检查命令扩展)

如果在 ifif /Iif notif /I not 之后紧接着遇到其中任何一个,则会进入特殊比较模式。如果存在 none 个这些关键字,则需要对两个值进行正常比较(使用比较运算符 == 强制进行字符串比较,或使用 equneq 之一, gtr, geq, lss, leq 用于尝试将两个值都解释为整数并将它们作为整数进行比较,或者,如果不可能,将它们作为字符串进行比较)。

由于您在 if 命令后立即声明了关键字 errorlevel,因此需要一个数值。根据 this section[=55,等号不再被特别对待,而是像 SPACE 一样被视为标准标记分隔符=]1,多个连续的分隔符合并为一个。

因此,你的命令行if errorlevel == #相当于if errorlevel #,意思是如果ErrorLevel大于等于#.出于这个原因,您不能交换两个 if 命令行,因为 errorLevel2 也会满足上述条件 1.


1) 实际上,此列表中缺少垂直制表符(代码 0x0B)和不间断符 space(代码 0xFF)。