IF语句是在很多编程语言(包括c语言、C++、C#、java、VB、汇编语言等)中用来判定所给定的条件是否满足,根据判定的结果(真或假)决定执行给出的两种操作之一。if的返回值为真或假。
Bat批处理脚本中的IF语句用来执行批处理程序中的条件处理。
1. if语句
语法格式:
IF [NOT] ERRORLEVEL number command
IF [NOT] string1==string2 command
IF [NOT] EXIST filename command
参数说明:
-
NOT 只有NOT关键字后面的条件为false时,才执行后面的命令。
-
ERRORLEVEL number 如果最后运行的程序返回一个等于或大于指定数字的退出代码,指定条件为 true。
-
string1==string2 如果字符串string1等于string2,指定条件为 true。
-
EXIST filename 如果指定的文件名存在,指定条件为 true。
-
command 如果符合条件,指定要执行的命令。如果指定的条件为 FALSE,命令后可跟 ELSE 命令,将执行 ELSE 关键字之后的命令。
NOT参数实例:
@echo off
rem abc等于abc为true,输出ok
if abc == abc echo ok
rem not后面的条件“abc == abc”成立(值为true)
rem 命令“echo ok”不能被执行
if not abc == abc echo ok
rem not后面的条件“abc == ab”不成立(值为false)
rem 命令“echo ok”被执行
if not abc == ab echo ok
pause
实例:
@echo off
set /p pwd=请输入密码:
if "%pwd%"=="12345" echo 密码正确
set /p pwd1=请输入密码:
if not "%pwd1%"=="12345" echo 错误的密码: %pwd1%
set file=D:\1.txt
if exist %file% echo %file% 文件存在
if not exist %file% echo %file% 文件不存在
rem 模拟测试 “ERRORLEVEL number” %ERRORLEVEL% 的结果大于等于指定值,表达式为true
opy 1.txt >nul 2>nul
if errorlevel 0 echo errorlevel=%errorlevel% 大于0,所以显示
if errorlevel 9010 echo errorlevel=%errorlevel% 小于9010,所以不显示
pause
运行结果:
2. if命令的5种用法
-
if “str1”==“str2” command 语句
判断两个字符串是否相等
-
if “num1” equ “num2” command 语句
判断两个数值是否相等
判断两个数值之间的大小关系的其他关系符
中文含义 | 关系符 |
---|---|
EQU | 等于 |
NEQ | 不等于 |
LSS | 小于 |
LEQ | 小于或等于 |
GTR | 大于 |
GEQ | 大于或等于 |
-
if exist filename command 语句
判断判断驱动器,文件或文件夹是否存在
-
if defined 变量 command 语句
判断变量是否已经定义
-
if errorlevel 数值 command 语句
判断上个命令的返回值
实例:if命令的5种用法
@echo off
rem 判断字符是否相等
if "abc"=="abc" echo 字符串相等
rem 判断数值是否相等
if 5 NEQ 3 echo 5不等于3
rem 判断文件是否存在
if exist d:\1.bat (echo D盘下有1.bat存在) else (echo D盘下不存在1.bat)
rem 判断变量是否已定义
if defined str (echo 变量str已经被赋值,其值为%str%) else (echo 变量str的值为空)
rem 判断上个命令的返回值
if errorlevel 1 (echo %errorlevel%大于等于1) else (echo %errorlevel%小于1)
pause
运行结果:
3. if else语句
if-else 语句,用来处理 “如果条件为真,则执行命令1;否则,执行命令2”。
if 条件为真(
命令1
)else(
命令2
)
rem 语法格式:
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 filename.需要加上括号,以下子句有效:
IF EXIST filename. (del filename.) ELSE echo filename. missing
实例:输入年龄判断是否成年;下面是2个错误写法:
//错误写法1: if 条件 命令 else 命令在同一行
@echo off
set /p age=请输入你的年龄:
if %age% GEQ 18 echo 你的年龄为:%age% ,已经成年。 else echo 你的年龄为:%age% ,未成年。
pause
//错误写法2: else不在if命令同一行上
@echo off
set /p age=请输入你的年龄:
if %age% GEQ 18 echo 你的年龄为:%age% ,已经成年。
else echo 你的年龄为:%age% ,未成年。
pause
正确写法:
@echo off
set /p age=请输入你的年龄:
if %age% GEQ 18 (
echo 你的年龄为:%age% ,已经成年。
) else (
echo 你的年龄为:%age% ,未成年。
)
pause
注意:else和后面的(之间必须有一个空格,不然脚本不能正常运行。
在一行中,不能以else开头,会报错。
如果命令都要放在同一行上,可以将if条件判断后面的命令加上括号,但是阅读性差;
@echo off
set /p age=请输入你的年龄:
if %age% GEQ 18 (echo 你的年龄为:%age% ,已经成年。) else echo 你的年龄为:%age% ,未成年。
pause
运行结果:
4. if elseif else语句
if else只能处理2个条件分支,如果有多个条件就需要用到if elseif else语句;
实例:通过输入水果名称查水果价格
@echo off
set /p name=输入商品名称:
if "%name%" == "苹果" (
echo 苹果的价格是5元/个!
) else if "%name%" == "香蕉" (
echo 香蕉的价格是2元/根!
) else if "%name%" == "榴莲" (
echo 榴莲的价格是40元/斤!
) else if "%name%" == "芒果" (
echo 芒果的价格是8元/个!
) else (
echo 无%name%的价格
)
pause