批处理文件:两个连续的 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
(检查命令扩展)
如果在 if
、if /I
、if not
或 if /I not
之后紧接着遇到其中任何一个,则会进入特殊比较模式。如果存在 none 个这些关键字,则需要对两个值进行正常比较(使用比较运算符 ==
强制进行字符串比较,或使用 equ
、neq
之一, gtr
, geq
, lss
, leq
用于尝试将两个值都解释为整数并将它们作为整数进行比较,或者,如果不可能,将它们作为字符串进行比较)。
由于您在 if
命令后立即声明了关键字 errorlevel
,因此需要一个数值。根据 this section[=55,等号不再被特别对待,而是像 SPACE 一样被视为标准标记分隔符=]1,多个连续的分隔符合并为一个。
因此,你的命令行if errorlevel == #
相当于if errorlevel #
,意思是如果ErrorLevel
大于等于#
.出于这个原因,您不能交换两个 if
命令行,因为 errorLevel
值 2
也会满足上述条件 1
.
1) 实际上,此列表中缺少垂直制表符(代码 0x0B
)和不间断符 space(代码 0xFF
)。
我正在尝试理解批处理文件中 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
(检查命令扩展)
如果在 if
、if /I
、if not
或 if /I not
之后紧接着遇到其中任何一个,则会进入特殊比较模式。如果存在 none 个这些关键字,则需要对两个值进行正常比较(使用比较运算符 ==
强制进行字符串比较,或使用 equ
、neq
之一, gtr
, geq
, lss
, leq
用于尝试将两个值都解释为整数并将它们作为整数进行比较,或者,如果不可能,将它们作为字符串进行比较)。
由于您在 if
命令后立即声明了关键字 errorlevel
,因此需要一个数值。根据 this section[=55,等号不再被特别对待,而是像 SPACE 一样被视为标准标记分隔符=]1,多个连续的分隔符合并为一个。
因此,你的命令行if errorlevel == #
相当于if errorlevel #
,意思是如果ErrorLevel
大于等于#
.出于这个原因,您不能交换两个 if
命令行,因为 errorLevel
值 2
也会满足上述条件 1
.
1) 实际上,此列表中缺少垂直制表符(代码
0x0B
)和不间断符 space(代码 0xFF
)。