5 种 if 语句的基本语法:
if "字符串1"=="字符串2" command 语句;
if 数值1 equ 数值2 command 语句;
if exist filename command 语句;
if defined 变量 command 语句;
if errorlevel 数值 command 语句
。if"字符串1"=="字符串2" command 语句
注意:在"字符串1"=="字符串2"
中,是两个连续的"=
"
例1
@echo off
set /p var1=请输入第一个比较的字符:
set /p var2=请输入第二个比软的字符:
if "%var1%"=="%var2%" (echo 输入的两个字符相同) else echo 输入的两个字符不相同
pause
执行后会要求你输入两个字符串,然后批处理判断它俩是否相同。在判断字符串是否相等的时候,if
是会区分大小写的,请看,
例2
@echo off
if "a"=="A" (echo 输入的两个字符相同) else echo 输入的两个字符不相同
pause
执行后会显示:输入的两个字符不相同如果我们不想让它区分大小写,则可以加上/i
参数。再看下面这个例子,
例3
@echo off
if /i "a"=="A" (echo 输入的两个字符相同) else echo 输入的两个字符不相同
pause
这次执行后会显示:输入的两个字符相同
if 数值1 equ 数值2 command 语句
语句中的equ
表示相等的意思,判断两个数值之间的大小关系还有以下关系符号:
中文含义 | 关系符 | 英文解释 |
---|---|---|
等于 | equ |
equal |
大于 | gtr |
greater than |
大于或等于 | geq |
greater than or equal |
小于 | lss |
less than |
小于或等于 | leq |
less than or equal |
不等于 | neq |
no equal |
我们还是来看个例子,
例4
@echo off
set /p var=请输入一个数字:
if %var% geq 10 (echo 此数大于或等于10) else echo 此数小于10
pause
注意哦,批处理中的大于号,小于号,等于号等等都不能用:“>” “<” “=”
这些符号,而要用像"gtr"
这类的。
☆注意:if
比较字符串与比较数字 之间的区别,它们的区别体现在引号""上面,请看下面的例子
【example 1】
@echo off
if "12" lss "4" (echo 12竟然小于4哦?) else echo 12当然不会小于4的!
pause
执行的结果是:12竟然小于4哦?
【example 2】
@echo off
if 12 lss 4 (echo 12竟然小于4哦?) else echo 12当然不会小于4的!
Pause
执行的结果是:12当然不会小于4的!
为什么【example 1】中加了双引号""会出错呢?
原因如下:
如果要比较的两个元素加了双引号"",那么会被当成是字符的比较。两个元素作比较的流程是:先比较两个元素的首位,如果首位相同,再比较第二位,如果第二位相同,再比较第三位。。。依此,在【example 1】if “12” lss “4” 语句中,实质是1与4的比较,1当然小于4,所以执行了后面的命令:echo 12竟然小于4哦?
☆建议:如果是字符串的比较就使用双引号"" 是数字的比较就不用双引号了!
if exist filename command 语句
我们来瞧瞧这个判断驱动器,文件或者文件夹是否存在的语句,这里if exist filename
是表示:存在 filename
的意思。
例5
@echo off
if exist "e:" (echo e盘存在) else echo e盘不存在
pause>nul
这里是判断 e:
是否存在!
例6
@echo off
if exist d:\123.bat (echo 123.bat文件存在!) else echo 123.bat文件不存在!
pause
这个例子是用来判断123.bat
文件是否存在的,但并不严谨!如果123.bat
是一个文件夹而不是一个文件时,上面的判断就不行了!那么如何判断指定的文件123.txt
是否存在?请看:
@echo off
dir /a-d d:\123.bat >nul 2>nul
if %errorlevel%==0 (echo 123.bat文件存在!) else echo 123.bat文件不存在!
Pause
先用 dir
的/a-d
参数去除123.bat
的目录属性,指定说明要搜索的123.bat
是文件而不是文件夹,并把结果(包括正确和错误)屏蔽(>nul 2>nul
),如果dir
找到了文件123.bat
,那么其errorlevel
值(dir
命令的退出编码)会被设为0,否则为1则是没有此文件。当然也可以用||
和&&
来判断。关于为什么要用if %errorlevel%==0
而不用if errorlevel 0
呢?在后面if errorlevel
中会有说明!
例7
@echo off
if exist test\ (echo test 是文件夹) else echo test 是文件
pause
这里是判断文件夹是否存在。对于文件夹存在的判断,我们不可以用以下两种写法:
第①种
@echo off
if exist test\. (echo test 是文件夹) else echo test 是文件
pause
第②种
@echo off
if exist test\nul (echo test 是文件夹) else echo test 是文件
pause
if defined 变量 command 语句
这是一个判断变量是否已被定义的语句,我们还是先看例子,
例8
@echo off
if defined a (echo 变量 a 已定义) else (echo 变量 a 没有被定义)
pause
执行后显示:变量 a
没有被定义
例9
@echo off
set a=
if defined a (echo a defined) else (echo a undefined)
pause
执行后显示:变量 a
没有被定义
注意:set a=
这后面是没有空格的。
例10
@echo off
set a=10
if defined a (echo a defined) else (echo a undefined)
pause
执行后显示:变量 a 已定义
看了上面三个例子,你应该发现点什么了吧?现在我们应该知道了:当变量不存在或是值为空时,变量则为未定义。
当我们用if defined 变量 command
语句判断变量是否被定义时,请注意变量为不使用引导符号%
的变量名,不能用写为%变量%
,否则出错。
大家来试一下下面的这两个例子,
例11
@echo off
set var1=5
if defined var1 (echo 变量var1已定义) else (echo 变量var1没有被定义)
set /p var2=请输入一个数字:
if defined %var2% (echo 变量var2已定义) else (echo 变量var2没有被定义)
pause
例12
@echo off
set var1=5
if defined var1 (echo 变量var1已定义) else (echo 变量var1没有被定义)
set /p var2=请输入一个数字:
if defined var2 (echo 变量var2已定义) else (echo 变量var2没有被定义)
pause
注意例11和例12哦:一个是%var2%
而另一个是var2
if errorlevel 数值 command 语句
这个语句是用于判断上一个命令执行的返回值errorlevel
,我们还是先来看看例子,
例13
@echo off
net user
if %errorlevel% == 0 (echo net user 命令执行成功) else (echo net user 命令执行失败)
Pause
注意:%errorlevel%
这是个系统变量,所以用两个%
括起来,这里的==
为两个连续的=
也许有些朋友说我上面的例子是不是写错了?按照语法应该写成“if errorlevel 0
”才对的呀。
如果你是这样用的话,那你就错了,还真不信呀?OK,我们来设计个实验看看
例14
@echo off
set /p input=请输入任意一条命令:
if errorlevel 0 (echo %input% 命令执行成功) else (echo %input% 命令执行失败)
pause
用这种语法,不管你前面的命令,是否执行成功,它都会认为命令成功了。何解?
if errorlevel 语句
的特点:
当使用 if errorlevel 0 cmmand 句式
时,它的含义是:如果返回的错误码值大于或等于0
的时候,将执行cmmand
操作;
当使用 if %errorlevel%==0 cmmand
句式时,它含义是:如果返回的错误码值等于0
的时候,将执行cmmand
操作。
一般上一条命令的执行结果返回的值只有两个,"成功"用0 表示 "失败"用 1
表示,实际上,errorlevel
返回值可以在0~255
之间,例如xcopy
默认的errorlevel 值就有5
个,分别表示5
种执行状态:
0
复制文件成功1
未找到复制文件2
用户通过CTRL C
终止了xcopy
操作4
出现了初始化错误5
出现了磁盘写入错误对于if
条件语句,常用的也就上面那5条吧,下面我们来看一下它的两种格式:
if
条件语句的完整格式是:if 条件表达式 (语句1) else (语句2)
它的含义是:如果 条件表达式
成立,就执行 语句1
,否则,将执行 语句2
。? else
后的 语句2
也可以不用括号括起。
if
条件语句的简单格式是:if 条件表达式 (语句)
它的含义是:如果 条件表达式
成立,将执行 语句
,否则,什么都不做。条件表达式后的 语句
也可以不用括号括起。
例15
@echo off
if exist "d:\123.txt" (del "d:\123.txt")
pause
你也可以写成下面这样
例16
@echo off
if exist "d:\123.txt" del "d:\123.txt"
pause
补充1:if not 语句
对于if
语句前面的5种基本语法,都可以加上not
参数,如
1。if not "字符串1"=="字符串2" command
语句;
2。if not数值1 equ 数值2 command
语句;
3。If not exist filename command
语句;
4。if not defined 变量 command
语句;
5。if not errorlevel 数值 command
语句。
在if
条件表达式 (语句) 语句,如没有not
参数,默认是判断条件成立时,执行语句;如有not
参数,判断条件失败时,执行语句。
我们看一下下面的例子:
例17
@echo off
if exist "c:\" (echo C盘存在) else echo C盘不存在
pause
执行后显示:C盘存在
例18
@echo off
if not exist "c:\" (echo C盘存在) else echo C盘不存在
pause
执行后显示:C
盘不存在
不会吧,例18中执行后显示:C盘不存在,这简值是在说瞎话了,那到底是什么回事呢?
if not exist "c:\" (echo C盘存在) else echo C盘不存在
此语句中文意思:如果不存在C:\
就执行显示C盘存在;否则<指的是存在C:>就执行显示C盘不存在。
注:if exist
意为如果存在,那么if not exist
就是如果不存在
你的C盘当然是实实在在存在的啦,根椐上面的中文分得知,那执行例18后就显示为:C盘不存在 通过分析例18,你应该明白if
语句中not
参数是怎么用了吧!
补充2:IF
语句嵌套的写法,我们先来看看
例1
@echo off
set a=55
if %a% geq 50 (
if %a% geq 80 (
if %a% geq 100 (
echo a大于等于100
) else echo a小于100
) else echo a小于80
) else echo a小于50
pause
这是一种比较规范的写法,那这种写法是怎样写的呢?那我们一步步的来:
if %a% geq 50 ( ) else echo a小于50
geq 50
后面的括号()里按两下回车,主要是空两行出来。if %a% geq 50 (
if %a% geq 80 ( )else echo小于80
) else echo a小于50
geq 80
后面的括号()里按两下回车,主要是空两行出来。if %a% geq 50 (
if %a% geq 80 (
if %a% geq 100 ( ) else echo a小于100
)else echo小于80
) else echo a小于50
geq 100
后面的括号()里按两下回车,主要是空两行出来。if %a% geq 50 (
if %a% geq 80 (
if %a% geq 100 (
echo a大于等于100
) else echo a小于100
)else echo小于80
) else echo a小于50
上面的代码中,if %a%
和 )else
要适当的缩进,以达到写书清晰!