IF语句是批处理中执行的条件分歧处理。
批处理中,IF分歧的写法有好几种,接下来,我们来一个一个的分析IF语法的结构。
1、IF [NOT] ERRORLEVEL 番号 批处理命令
当ERRORLEVEL的值大于等于指定的番号的值时,执行指定的批处理命令。
@echo off call :called0 IF ERRORLEVEL 100 ( echo ERRORLEVEL = %ERRORLEVEL% ) call :called1 IF ERRORLEVEL 100 ( echo ERRORLEVEL = %ERRORLEVEL% ) call :called2 IF ERRORLEVEL 100 ( echo ERRORLEVEL = %ERRORLEVEL% ) exit /b 200 :called0 SETLOCAL echo called0 exit /b 99 ENDLOCAL :called1 SETLOCAL echo called1 exit /b 100 ENDLOCAL :called2 SETLOCAL echo called2 exit /b 101 ENDLOCAL
运行的结果为:
C:\Users\liuhongying>F:\tmp\a.bat
called0
called1
ERRORLEVEL = 100
called2
ERRORLEVEL = 101
发现,在返回值跟100比的时候,只有等于100和大于100的时候,执行到了下面的批处理命令,而在99的时候,就没有执行批处理命令,这个测试你结果,你就应该明白了吧!
2、IF [NOT] 文字列1==文字列2 批处理命令
这个判断是比较文字列1和文字列2是不是相等,如果是变量,就要用%来取出变量的值来比较。
IF [/I] [NOT] 文字列1==文字列2 批处理命令
有一个控制开关,/I,是控制比较的时候是不是忽略大小写。如果有/I这个开关存在的时候,比较的时候就会忽略大小写去比较。
看看下面这个例子,你就 应该全部明白了。
@echo off IF abcdef==abcdef ( echo abcdef==abcdef ) IF AbCdEF==abcdef ( echo AbCdEF==abcdef ) IF /I ABCDEF==abcdef ( echo ABCDEF==abcdef ) IF /I AbCdEF==abcdef ( echo AbCdEF==abcdef )
F:\tmp>a.bat
abcdef==abcdef
ABCDEF==abcdef
AbCdEF==abcdef
3、IF [NOT] EXIST 文件名 批处理命令
帮助上面写的是判断文件名是否存在,其实,这个判断方法既可以判断文件是否存在,又可以判断路径是不是存在。
@echo off IF EXIST F:\tmp\a.bat ( echo EXIST:F:\tmp\a.bat ) IF EXIST F:\tmp ( echo EXIST:F:\tmp )
执行结果:
F:\tmp>a.bat
EXIST:F:\tmp\a.bat
EXIST:F:\tmp
4、IF [/I] 文字列1 比較演算子 文字列2 批处理命令
对文字列1和文字列2按照比较演算子进行比较,比较结果为真的时候,就执行批处理命令指定的处理。
下面对几种比较演算子进行进行介绍。
EQU - 等于(等しい)
NEQ - 不等于(等しくない)
LSS - 小于(より小さい)
LEQ - 小于等于(以下)
GTR - 大于(より大きい)
GEQ - 大于等于(以上)
下边这个例子,对这几个判断符进行解说
@echo off echo EQU IF a EQU a ( echo a EQU a ) IF a EQU b ( echo a EQU b ) echo NEQ IF a NEQ a ( echo a NEQ a ) IF a NEQ b ( echo a NEQ b ) echo LSS IF a LSS a ( echo a LSS a ) IF a LSS b ( echo a LSS b ) IF b LSS a ( echo b LSS a ) echo LEQ IF a LEQ a ( echo a LEQ a ) IF a LEQ b ( echo a LEQ b ) IF b LEQ a ( echo b LEQ a ) echo GTR IF a GTR a ( echo a GTR a ) IF a GTR b ( echo a GTR b ) IF b GTR a ( echo b GTR a ) echo GEQ IF a GEQ a ( echo a GEQ a ) IF a GEQ b ( echo a GEQ b ) IF b GEQ a ( echo b GEQ a )
运行结果为:
F:\tmp>a.bat
EQU
a EQU a
NEQ
a NEQ b
LSS
a LSS b
LEQ
a LEQ a
a LEQ b
GTR
b GTR a
GEQ
a GEQ a
b GEQ a
5、IF CMDEXTVERSION 番号 批处理命令
最初的CMDEXTVERSION的值是1,当扩展命令可以使用的时候,CMDEXTVERSION的值就比1大了。
并且,当扩张技能无效的时候,这个表达式命题恒为假。
更加具体的作用,这里不去探讨了,如果以后有需要,用到了,在去追加吧!
6、IF DEFINED 変数 批处理命令
如果指定的变数定义的时候,就执行批处理命令指定的处理。更加准确的描述应该是,指定的便是的值是空的时候,句执行批处理命令指定的处理。
@echo off set var1=abc set var3= set var4= IF DEFINED var1 ( echo DEFINED var1 ) IF DEFINED var2 ( echo DEFINED var2 ) IF DEFINED var3 ( echo DEFINED var3 ) IF DEFINED var4 ( echo DEFINED var4 )
*var3=后面是没有设置空格
*var4=后面是设置空格的
运行结果为:
F:\tmp>a.bat
DEFINED var1
DEFINED var3
PS:以上的语法介绍中,都没有详细介绍另个重要点
A:所有加[NOT]的地方,如果加了NOT以后,就将判断的调节取反。
B:所有的命令都没有介绍else的语法,所有的IF判断,都是可以再行后最佳【else 批处理命令】,也就是说,当判断条件不成立的时候,执行批处理命令指定的处理。
更推荐的写法是,所有批处理命令都加上小括号,如下述结果
IF 条件 ( 条件为真的时候的处理 ) else ( 条件为假的时候的处理 )