windows批处理中if语句的用法详解
作者:微小冷
if
if是宇宙通用的条件选择语句标识,在批处理指令中也不例外。但和其他语言不同之处在于,批处理中的if有一个not开关,即if XXX表示xxx为真时执行后续语句,if not XXX表示XXX为假时执行后续语句。
从判断内容的角度来说,if提供了三种类型的判断,分别是数字、字符串和文件路径,下面做一个批处理文件,统一演示一下
:: iftest.bat @echo off dir test.txt if errorlevel 1 (echo error) if a==a (echo a==a) if exist iftest.bat (echo iftest.bat exist)
结果如下
>iftest.bat
。。。
找不到文件
error
a==a
iftest.bat exist
首先,if errorlevel 1,表示如果上一条命令的错误码大于1,那么就执行后续代码。上一条代码是dir test.txt,这个文件是不存在的,所以执行结果是找不到文件,同时系统错误码也变成了1。在这种情况下,if errorlevel 1判定为真,执行后面的echo error语句。
第二条没什么好说的,判断两个字符串是否相等,很显然相等。
第三条其实也没什么好说的,判断iftest.bat是否存在,我们创建的这个脚本就是iftest.bat,这个文件显然是存在的。
分析这三条代码可以发现,if后面紧跟着要执行的命令,是用小括号括起来的,这一点和许多编程语言不同。如果执行的语句只有一行,那么这个括号可以省略,否则就必须带上,而且括号(和条件之间必须有空格。
有一些奇葩的dos指令,需要在换行时才能生效,比如del,这种情况下代码必须换行。
扩展命令
上面这三种基础指令,其实很弱小,甚至无法比较两个数字。所以windows分别为其提供了扩展功能,对应指令如下:
原生 | 扩展 | 说明 |
---|---|---|
if errorlevel xxx | if cmdextversion xxx | 判断系统错误码 |
if a==b | if a op b | 字符串或者数值比较,op包含多种运算符 |
if exist xxx | if defined xxx | 扩展指令还可以检查变量是否存在 |
其中,op的可用运算符包括
op | 说明 | op | 说明 |
---|---|---|---|
EQU | 等于 | NEQ | 不等于 |
LSS | 小于 | LEQ | 小于或等于 |
GTR | 大于 | GEQ | 大于或等于 |
如果是两个数字比较,那么就直接比较大小;如果是字符串,那么就根据ASCII的位置进行比较。并且此时还有一个忽略大小写开关/i,选中之后,在比较字符时将忽略大小写。
:: ifadvanced.bat @echo off dir test.txt if cmdextversion 1 (echo error) if 3 LSS 4 (echo "3<4") set a=5 if defined a (echo a=%a%)
运行结果如下
>ifadvanced.bat
找不到文件
error
"3<4"
a=5
else
批处理中的else,或者else if有很多说道,比如必须和上一个if同行,如果if中的命令是多行的,那么就必须和if的尾括号同行,否则就不会被执行。
:: ifelse.bat @echo off if %1==1 ( goto :a )else if %1==2 ( goto :b )else ( goto :c ) :a echo you inputted 1 goto :eof :b echo you inputted 2 goto :eof :c echo you didn't input 1 or 2 goto :eof
运行结果如下
>iftest 1
you inputted 1
>iftest 2
you inputted 2
>iftest 5
you didn't input 1 or 2
到此这篇关于windows批处理中if语句的用法详解的文章就介绍到这了,更多相关批处理if语句内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!