入门命令4-条件判断:if
if 用于作条件判断,各种语言中都有这玩意.它在批处理中的用处:
1.判断两个字符串是否相等, if "字符串1"=="字符串2" command 语句;(这里用的是数学上的==,字符串比较涉及大小写在if后加参数/i)
2.判断两个数值是否相等, if 数值1 equ 数值2 command 语句;(这里用的是英文代号,是不是刚好相反^-^ 比较数值用字符串似的操作符)
3.判断驱动器, 文件或文件夹是否存在, if exist filename command 语句;
4.判断变量是否已经定义, if defined 变量 command 语句;
5.判断上个命令的返回值, if errorlevel == 命令执行返回码 command 语句.
---当然,if用完了之后可以接else if...else也可以无限嵌套使用.
下面来实际练习一下就明白了:
1. if "字符串1"=="字符串2" command 语句
例1:
1 ::rem 关闭命令回
2 @echo off
3 rem 设置将输入读入变量,这个set后面会讲到,这里只需要记住用set /p 变量名=输入值
4 set /p char1=请输入第一个字符串:
5 set /p char2=请输入第二个字符串:
6 rem 引用变量用两个%把它括起来,后面会讲到
7 if "%char1%"=="%char2%" (echo 输入的两个字符相同) else echo 输入的两个字符不相同
8 pause>nul
例2:大小写区分时用/i 参数
1 @echo off
2 if "TEST"=="test" (echo 相同) else echo 不相同
3 if /i "TEST"=="test" (echo 相同) else echo 不相同
4 pause >nul
2.判断两个数值是否相等, if 数值1 equ 数值2 command 语句
中文含义 | 数学表达式 | 关系符 | 英文解释 |
等于 | = | equ | equal |
大于 | > | gtr | greater than |
大于或等于 | >= | geq | greater than or equal |
小于 | < | lss | less than |
小于或不等于 | <= | leq | less than or equal |
不等于 | != | neq | no equal |
例3:比较数值大小
1 @echo off
2 set /p var=请输入一个数字:
3 if %var% gtr 100 (
4 echo 此数大于100
5 ) else (
6 if %var% equ 100 (
7 echo 此数等于100
8 ) else echo 此数于小100
9 )
10 pause >nul
在例3中,其实所有语句都可以写在一行上.
很多人会遇到换行与括号怎么打的问题,在排版缩进时注意两点即可:
a.断行一定要从括号边上来断
b.else与括号两边各有个空格
3.判断驱动器, 文件或文件夹是否存在, if exist filename command 语句
例4:判断文件夹或者文件是否存在(当然也可以判断驱动器) 这是比较常用的批处理判断方式
1 @echo off
2 rem 考虑一下,为什么文件夹最后紧跟着\ 对比例5
3 if exist "d:\Program Files\" (echo 文件夹PF存在) else echo PF不存在
4 pause
例5 提示:在win平台下相同目录中:同名的文件夹与文件是不能同时存在的,所以在判断文件存在时,要注意可能会发生这类bug,解决方法为加一层判断
1 @echo off
2 if exist "d:\tutorial\" (echo 文件夹tutorial存在) else (
3 if exist "d:\tutorial" echo 文件tutotial存在
4 )
5 pause
4.判断变量是否已经定义, if defined 变量 command 语句 注意这里的变量处不要加%号括起来了
例6:
1 @echo off
2 set var1=""
3 if defined var1 (echo var1被定义) else echo var1未定义
4 set var2="test"
5 if defined var2 (echo var2被定义) else echo var2未定义
6 rem 释放变量,注意这个=号后没有空格
7 set var1=
8 if defined var1 (echo var1被定义) else echo var3未定义
9 pause >nul
5.判断上个命令的返回值, if errorlevel == 命令执行返回码 command 语句.
例7:
1 @echo off
2 dir
3 rem 对命令成功执行,用这种比较字符串的方式来比较
4 if %errorlevel% == 0 (echo dir 命令执行成功) else (echo dir 命令执行失败)
5 pause
提示:
tip1: %errorlevel%是一个环境变量,它是用来存放上一条命令的执行后的返回码,如果命令是成功,则返回值为0,如果是失败,则返回0-255之间的值.
tip2: 想看看上一条命令返回了什么,直接echo %errorlevel% 就可以看到了
tip3: 执行net helpmsg %errorlevel% 就可以看到是什么报错信息 例如: net helpmsg 2 显示:系统找不到指定的文件.
OK,上面五种用法都讲完了,其实if语句完整的格式是if...else形式 可以无限嵌套使用,如例3.
另外,这五种形式还可以变化成另一种,即在if 后面加上not 就把判断的条件作了一个否定,比如:
例8:
1 @echo off
2 if not exist "d:\" (echo D盘不存在) else echo D盘存在
3 pause
五种用法皆适用,这情况比较简单,就不啰嗦了.
OK,此篇结束.