在批处理程序中 if 语句非常有用,本章将仔细根据 if /? 帮助信息来解读 if 语句的基础用法,以及更高级的用法。
if 语句执行批处理程序中的条件处理。语法:
IF [NOT] ERRORLEVEL number command
IF [NOT] string1==string2 command
IF [NOT] EXIST filename command参数说明:
NOT 将表达式的结果取反。例如:表达式为true,not后就为false。只有条件为 false 的情况下,Windows 才应该执行该命令。
ERRORLEVEL number 如果最后运行的程序返回一个等于或大于指定数字的退出代码,指定条件为 true。
string1==string2 如果指定的字符串 string1 等于 string2,条件表达式为 true,执行 if 语句的命令。
EXIST filename 如果指定的文件名存在,指定条件为 true。
command 如果符合条件(即表达式为TRUE),指定要执行的命令。如果指定的条件为 FALSE,命令后可跟 ELSE 命令,该命令将在 ELSE 关键字之后执行该命令。
实例:下面通过实例演示上面几种 IF 语句形式的用法。
@echo off
rem 需要用户输入密码
set /p pwd=请输入密码:
if "%pwd%"=="123456" echo 密码正确
if not "%pwd%"=="123456" echo 错误的密码: %pwd%
set file=D:\tmp.txt
if exist %file% echo %file% 文件存在
if not exist %file% echo %file% 文件不存在
rem 下面有意将 copy 的目标文件参数不写,导致 copy 执行失败
rem 此时 errorlevel 等于 1,我们使用 “ERRORLEVEL number” 风格来判断拷贝是否成功
rem 用意:测试 “ERRORLEVEL number” %ERRORLEVEL% 的结果大于等于指定值,表达式为true
copy tmp.txt >nul 2>nul
if errorlevel 1 echo errorlevel=%errorlevel% 拷贝失败
if errorlevel 0 echo errorlevel=%errorlevel% 文件拷贝成功
ipconfig > nul
if errorlevel 0 echo errorlevel=%errorlevel% 执行成功输出结果:
C:\Users\Administrator\Desktop> test.bat
请输入密码:123
错误的密码: 123
D:\tmp.txt 文件不存在
errorlevel=1 拷贝失败
errorlevel=1 文件拷贝成功
errorlevel=0 执行成功上面简单的介绍了 “if” 语句的基础用法。本节我们将介绍 if-else 语句,该语句用来处理 “如果条件为真,执行语句1;否则,执行语句2”。伪语句:
if 条件 == true
语句1
else
语句2根据上面伪语句描述,我们可以使用 IF 加 NOT 实现该功能。
实例:用户输入密码,判断密码是否正确。
@echo off
set /p pwd=请输入密码:
if "%pwd%"=="123456" echo 密码正确
if not "%pwd%"=="123456" echo 错误的密码: %pwd%输出结果:
C:\Users\Administrator\Desktop> test.bat
请输入密码:123456
密码正确
C:\Users\Administrator\Desktop>test.bat
请输入密码:123455
错误的密码: 123455上述实例还可以采用 goto 去实现,因为还未介绍 goto 语法,这里就不使用 goto 实现。虽然使用 if + not 能实现该功能,但是代码看上去不是很优雅。我们可以使用批处理提供的 if-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如果都放在同一行上,以下子句有效(将 del 语句放入括号中):
IF EXIST filename. (del filename.) ELSE echo filename. missing实例:用户输入密码,判断密码是否正确。
@echo off
set /p pwd=请输入密码:
if "%pwd%"=="123456" (
echo 密码正确
) else (
echo 错误的密码: %pwd%
)输出结果:
C:\Users\Administrator\Desktop> test.bat
请输入密码:123456
密码正确
C:\Users\Administrator\Desktop>test.bat
请输入密码:123455
错误的密码: 123455如果条件分支比较少,使用 if-else 就可以了。但是,如果你遇到条件非常多的怎么处理呢?if-else 也能处理,批处理提供了 if -elseif-else 类似 switch 语句。实例:根据学生输入的成绩给出学生级别。代码如下:
@echo off
set /p score=输入成绩:
if %score% lss 60 (
echo 未及格,需要多努力啊!
) else if %score% lss 70 (
echo 及格,多做题
) else if %score% lss 80 (
echo 良,加把劲考
) else if %score% lss 90 (
echo 优,你很优秀,继续保持
) else (
echo 不是凡人
)
pause输出结果:
C:\Users\Administrator\Desktop>test.bat
输入成绩:78
良,加把劲考
请按任意键继续. . .如果你要将 else if 换行,需要在 “)” 后面添加 “^” 符号。如下:
@echo off
set /p score=输入成绩:
if %score% lss 60 (
echo 未及格,需要多努力啊!
) ^
else if %score% lss 70 (
echo 及格,多做题
) ^
else if %score% lss 80 (
echo 良,加把劲考
) ^
else if %score% lss 90 (
echo 优,你很优秀,继续保持
) ^
else (
echo 不是凡人
)
pause输出结果:
C:\Users\Administrator\Desktop>test.bat
输入成绩:78
良,加把劲考
请按任意键继续. . .