if

在批处理程序中执行条件处理。

语法

if [not] ERRORLEVEL <number> <command> [else <expression>]
if [not] <string1>==<string2> <command> [else <expression>]
if [not] exist <filename> <command> [else <expression>]

如果启用了命令扩展,请使用以下语法:

if [/i] <string1> <compareop> <string2> <command> [else <expression>]
if cmdextversion <number> <command> [else <expression>]
if defined <variable> <command> [else <expression>]

参数

参数 说明
not 指定仅当条件为 false 时,才应执行该命令。
errorlevel <number> 仅当由 Cmd.exe 运行的上一个程序返回等于或大于 number 的退出代码时,才指定 true 条件。
<command> 指定在满足上述条件时应执行的命令。
<string1>==<string2> 仅当 string1 和 string2 相同时,才指定 true 条件。 这些值可以是字符串或批处理变量(例如,%1)。 无需将字符串用引号括起来。
存在 <filename> 如果指定的文件名存在,则指定 true 条件。
<compareop> 指定三字母比较运算符,包括:
  • EQU - 等于
  • NEQ - 不等于
  • LSS - 小于
  • LEQ - 小于或等于
  • GTR - 大于
  • GEQ - 大于或等于
/i 强制字符串比较忽略大小写。 可以采用 ifstring1==string2 形式使用 /i。 这些比较是通用的,因为如果 string1 和 string2 仅由数字组成,则字符串将转换为数值并执行数值比较。
cmdextversion <number> 仅当与 Cmd.exe 的命令扩展功能关联的内部版本号等于或大于指定的数值时,才指定 true 条件。 第一个版本为 1。 向命令扩展添加大量增强功能时,它会以 1 为增量增加。 禁用命令扩展时(默认情况下,启用命令扩展),cmdextversion 条件永远不会为 true。
defined <variable> 如果定义了变量,则指定 true 条件。
<expression> 指定命令行命令以及要在 else 子句中传递给该命令的任何参数。
/? 在命令提示符下显示帮助。

备注

  • 如果 if 子句中指定的条件为 true,则执行条件后面的命令。如果条件为 false,则忽略 if 子句中的命令,并且该命令执行 else 子句中指定的任何命令。

  • 程序停止时,它将返回退出代码。 若要使用退出代码作为条件,请使用 errorlevel 参数。

  • 如果使用 defined,则将以下三个变量添加到环境中:%errorlevel%、%cmdcmdline% 和 %cmdextversion%

    • %errorlevel%:扩展为 ERRORLEVEL 环境变量的当前值的字符串表示形式。 此变量假定尚不存在名为 ERRORLEVEL 的现有环境变量。 如果存在,将获得该 ERRORLEVEL 值。

    • %cmdcmdline%:扩展到在 Cmd.exe 进行任何处理之前传递给 Cmd.exe 的原始命令行。 这假定尚不存在名为 CMDCMDLINE 的现有环境变量。 如果存在,将获得该 CMDCMDLINE 值。

    • %cmdextversion%:扩展为 cmdextversion 的当前值的字符串表示形式。 这假定不存在名为 CMDEXTVERSION 的现有环境变量。 如果存在,将获取该 CMDEXTVERSION 值。

  • 必须在 if 后面的命令所在的同一行上使用 else 子句。

示例

若要显示消息“如果找不到文件 Product.dat ,则找不到数据文件”,请键入:

if not exist product.dat echo Cannot find data file

若要在驱动器 A 中格式化磁盘并在格式化过程中发生错误时显示错误消息,请在批处理文件中键入以下行:

:begin
@echo off
format a: /s
if not errorlevel 1 goto end
echo An error occurred during formatting.
:end
echo End of batch program.

若要从当前目录中删除文件 Product.dat 或在找不到 Product.dat 时显示消息,请在批处理文件中键入以下行:

IF EXIST Product.dat (
del Product.dat
) ELSE (
echo The Product.dat file is missing.
)

注意

这些行可以组合成一行,如下所示:

IF EXIST Product.dat (del Product.dat) ELSE (echo The Product.dat file is missing.)

若要在运行批处理文件后回显 ERRORLEVEL 环境变量的值,请在批处理文件中键入以下行:

goto answer%errorlevel%
:answer1
echo The program returned error level 1
goto end
:answer0
echo The program returned error level 0
goto end
:end
echo Done!

若要在 ERRORLEVEL 环境变量的值小于或等于 1 时转到 ok 标签,请键入:

if %errorlevel% LEQ 1 goto okay