ITEEDU

注释

如果 if 命令中指定的条件为真,则系统将执行该条件后的命令。如果条件为假,则 if 子句中的命令将被忽略,同时执行 else 子句中的任何命令(如果指定)。

程序停止时,将返回退出码。可以利用 errorlevel 参数将退出码用作条件。

使用 defined variable

如果使用 defined variable,可以添加下面三个变量:%errorlevel%、 %cmdcmdline% 和 %cmdextversion%。

%errorlevel% 扩展到 errorlevel 当前值的字符串表达式,如果没有名为 ERRORLEVEL 的环境变量,就可取代它的值。下面的范例说明了如何在运行批处理程序后使用 errorlevel:

 goto answer%errorlevel%
 :answer0
 echo Program had return code 0
 :answer1
 echo Program had return code 1
 goto end
 :end
 echo done! 

也可以使用如下的 CompareOp 比较运算符:

 if %errorlevel% LEQ 1 goto okay

%cmdcmdline% 在任何 Cmd.exe 处理之前扩展传递到 Cmd.exe 的源命令行,如果没有名为 cmdcmdline 的环境变量,就可取代它的值。

%cmdextversion% 扩展到 cmdextversion 当前值的字符串表达式,如果没有名为 CMDEXTVERSION 的环境变量,就可取代它的值。

使用 else 子句

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

范例

如果没有找到文件 Product.dat,将会显示如下消息:

 if not exist product.dat echo Can't 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.

如果没有出现错误,将跳过错误消息。

if 命令不能用于直接测试目录,但空 (NUL) 设备确实存在于每个目录中。因此,可以通过测试零设备确定目录是否存在。以下范例可测试目录的存在:

 if exist c:mydir\nul goto process