windows批处理中if语句的用法详解

 更新时间:2023年08月31日 11:10:19   作者:微小冷  
if是宇宙通用的条件选择语句标识,在批处理指令中也不例外,这篇文章主要来大家学习一下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 xxxif cmdextversion xxx判断系统错误码
if a==bif a op b字符串或者数值比较,op包含多种运算符
if exist xxxif 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语句内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

最新评论