windows - 批处理文件:两个连续的 IF
问题描述
我正在尝试了解批处理文件中 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
命令支持一些特殊(不区分大小写)关键字:
exist
(检查文件是否存在)defined
(检查环境变量)ErrorLevel
(检查最后一个错误)CmdExtVersion
(检查命令扩展)
if
如果紧跟在、或之后遇到任何这些if /I
,则进入特殊比较模式。如果这些关键字都不存在,则需要对两个值进行正常比较(使用比较运算符强制进行字符串比较,或使用, , , ,之一来尝试将两个值解释为整数并将它们进行比较,或者,如果不可能,将它们作为字符串进行比较)。if not
if /I not
==
equ
neq
gtr
geq
lss
leq
errorlevel
由于您在命令后立即声明了关键字if
,因此需要一个数值。SPACE等号不再特殊处理,而是根据本节1仅将其视为标准标记分隔符,就像 a 一样,并将多个连续的分隔符折叠为一个。
因此,您的命令行if errorlevel == #
相当于if errorlevel #
,意思是如果ErrorLevel
大于或等于#
。出于这个原因,您不能交换两个if
命令行,因为errorLevel
value2
也将满足该 value 的所述条件1
。
1) 实际上,此列表中缺少 垂直制表符 (code
0x0B
) 和不间断空格 (code )。0xFF
推荐阅读
- python - selenium python产品加载按钮不起作用
- python - 连续开关信号之间的行数
- python - Pytorch:将 VGG 模型转换为顺序模型,但得到不同的输出
- android - 我的应用在 API 级别 30 上未收到 RECEIVE_BOOT_COMPLETED,但在 API 级别 21 上收到
- python - k个有序列表的交集python
- agda - 在案例拆分过程中遇到统一问题
- sql-server - 根据多个时间条件创建列
- javascript - 页面加载后写入脚本标签
- python - 如何在 Python 中延迟输出,同时仍在后台执行操作
- matlab - 如何查看 Matlab 函数背后的 Matlab 代码