if语句
基本语法
IF [NOT] string1==string2 command
IF [NOT] EXIST filename command
IF [NOT] ERRORLEVEL number command
string1==string2
如果指定的文字字符串匹配,则为 true。
EXIST filename
如果指定的文件名存在,则为 true。
ERRORLEVEL number
如果上一条命令返回的退出状态码等于或大于指定数字,则为 true。
-
NOT
指定只有条件为 false 的情况下,Windows 才应该执行该command命令。 -
command
符合条件时,指定要执行的命令。
ELSE 子句必须出现在同一行上的 IF 之后。例如:
IF EXIST filename. (
del filename.
) ELSE (
echo filename. missing.
)
由于 del 命令需要用新的一行终止,因此以下子句不会有效:
IF EXIST filename. del filename. ELSE echo filename. missing
由于 ELSE 命令必须与 IF 命令的尾端在同一行上,以下子句也不会有效:
IF EXIST filename. del filename.
ELSE echo filename. missing
如果都放在同一行上,以下子句有效:
IF EXIST filename. (del filename.) ELSE echo filename. missing
if命令扩展
如果命令扩展被启用,IF 会如下改变:
- 判断字符串
IF [/I] string1 compare-op string2 command
/I
选项用于指定字符串比较不区分大小写。
其中, compare-op 可以是:
EQU - 等于
NEQ - 不等于
LSS - 小于
LEQ - 小于或等于
GTR - 大于
GEQ - 大于或等于
- 判断环境变量是否存在
IF DEFINED variable command
DEFINED 条件用于检查一个环境变量是否存在,如果存在则为true。
- 判断命令扩展版本
IF CMDEXTVERSION number command
CMDEXTVERSION 条件检查命令扩展的版本号,它会检查命令扩展的版本是否等于或大于该数字。如果命令扩展被停用时,CMDEXTVERSION 条件不为真。
以下示例0
、1
、2
都返回。
IF CMDEXTVERSION 0 echo ok
IF CMDEXTVERSION 1 echo 命令扩展版本号至少是1。
IF CMDEXTVERSION 2 echo 命令扩展版本号至少是2。
IF CMDEXTVERSION 3 echo 命令扩展版本号至少是3。
几个特殊的环境变量
ERRORLEVEL
如果没有手动创建名为 ERRORLEVEL 的环境变量,使用 %ERRORLEVEL%
会代表上一条命令退出状态码,否则,会获得手动创建的 ERRORLEVEL 环境变量的值。
退出状态码通常是一个整数,其中0表示成功,非零值表示错误或特定的退出状态。
因此,通常情况下,我们不建议在批处理脚本中创建名为ERRORLEVEL的自定义环境变量,以免与内置的ERRORLEVEL机制产生混淆。
@REM set ERRORLEVEL=1
if %ERRORLEVEL% == 0 echo 0
CMDEXTVERSION
如果没有名为 CMDEXTVERSION 的环境变量,使用 %CMDEXTVERSION%
会存储命令扩展的版本号;否则,你会得到创建的 CMDEXTVERSION 环境变量的值。
CMDCMDLINE
如果没有名为 CMDCMDLINE 的环境变量,%CMDCMDLINE%
将在 CMD.EXE 进行任何处理前扩充为传递给 CMD.EXE 的原始命令行;否则,你会得到其数值。