Bat批处理脚本中的 if 语句

IF语句是在很多编程语言(包括c语言、C++、C#、java、VB、汇编语言等)中用来判定所给定的条件是否满足,根据判定的结果(真或假)决定执行给出的两种操作之一。if的返回值为真或假。
Bat批处理脚本中的IF语句用来执行批处理程序中的条件处理。

1. if语句

语法格式:

IF [NOT] ERRORLEVEL number command
IF [NOT] string1==string2 command
IF [NOT] EXIST filename command

参数说明:

  • NOT 只有NOT关键字后面的条件为false时,才执行后面的命令。

  • ERRORLEVEL number 如果最后运行的程序返回一个等于或大于指定数字的退出代码,指定条件为 true。

  • string1==string2 如果字符串string1等于string2,指定条件为 true。

  • EXIST filename 如果指定的文件名存在,指定条件为 true。

  • command 如果符合条件,指定要执行的命令。如果指定的条件为 FALSE,命令后可跟 ELSE 命令,将执行 ELSE 关键字之后的命令。
    NOT参数实例:

@echo off
rem abc等于abc为true,输出ok
if  abc == abc    echo ok 
rem not后面的条件“abc == abc”成立(值为true)
rem 命令“echo ok”不能被执行
if not abc == abc    echo ok 
rem not后面的条件“abc == ab”不成立(值为false)
rem 命令“echo ok”被执行
if not abc == ab    echo ok 
pause

实例:

@echo off
set /p pwd=请输入密码:
if "%pwd%"=="12345" echo 密码正确
set /p pwd1=请输入密码:
if not "%pwd1%"=="12345" echo 错误的密码: %pwd1%
 
set file=D:\1.txt
if exist %file% echo %file% 文件存在
if not exist %file% echo %file% 文件不存在
 
rem 模拟测试 “ERRORLEVEL number” %ERRORLEVEL% 的结果大于等于指定值,表达式为true
opy 1.txt >nul 2>nul
if errorlevel 0 echo errorlevel=%errorlevel% 大于0,所以显示
if errorlevel 9010 echo errorlevel=%errorlevel% 小于9010,所以不显示
pause

运行结果:

2. if命令的5种用法

  • if “str1”==“str2” command 语句

    判断两个字符串是否相等

  • if “num1” equ “num2” command 语句

    判断两个数值是否相等

    判断两个数值之间的大小关系的其他关系符

中文含义关系符
EQU等于
NEQ不等于
LSS小于
LEQ小于或等于
GTR大于
GEQ大于或等于
  • if exist filename command 语句

    判断判断驱动器,文件或文件夹是否存在

  • if defined 变量 command 语句

    判断变量是否已经定义

  • if errorlevel 数值 command 语句

    判断上个命令的返回值

实例:if命令的5种用法

@echo off
rem 判断字符是否相等
if "abc"=="abc"  echo 字符串相等
rem 判断数值是否相等
if 5 NEQ 3 echo 5不等于3
rem 判断文件是否存在
if exist d:\1.bat (echo D盘下有1.bat存在) else (echo D盘下不存在1.bat)
rem 判断变量是否已定义
if defined str (echo 变量str已经被赋值,其值为%str%) else (echo 变量str的值为空)
rem 判断上个命令的返回值
if errorlevel 1 (echo %errorlevel%大于等于1) else (echo %errorlevel%小于1)
pause

运行结果:

3. if else语句

if-else 语句,用来处理 “如果条件为真,则执行命令1;否则,执行命令2”。

if 条件为真(
   命令1
)else(
   命令2
)

rem 语法格式:
IF EXIST filename. (
    del filename.
) ELSE (
    echo filename. missing.
)

del 命令需要用新的一行终止,因此以下子句不会有效:

IF EXIST filename. del filename. ELSE echo filename. missing

由于 ELSE 命令必须与 IF 命令的尾端在同一行上,以下子句也不会有效:

IF EXIST filename. del filename.
ELSE echo filename. missing

如果都放在同一行上,del filename.需要加上括号,以下子句有效:

IF EXIST filename. (del filename.) ELSE echo filename. missing

实例:输入年龄判断是否成年;下面是2个错误写法:

//错误写法1: if 条件 命令 else 命令在同一行
@echo off
set /p age=请输入你的年龄:
if %age% GEQ 18 echo 你的年龄为:%age% ,已经成年。 else echo 你的年龄为:%age% ,未成年。
pause

//错误写法2: else不在if命令同一行上
@echo off
set /p age=请输入你的年龄:
if %age% GEQ 18 echo 你的年龄为:%age% ,已经成年。 
else echo 你的年龄为:%age% ,未成年。
pause

正确写法:

@echo off
set /p age=请输入你的年龄:
if %age% GEQ 18 (
    echo 你的年龄为:%age% ,已经成年。
) else (
	   echo 你的年龄为:%age% ,未成年。
)
pause

注意:else和后面的(之间必须有一个空格,不然脚本不能正常运行。

在一行中,不能以else开头,会报错。

如果命令都要放在同一行上,可以将if条件判断后面的命令加上括号,但是阅读性差;

@echo off
set /p age=请输入你的年龄:
if %age% GEQ 18 (echo 你的年龄为:%age% ,已经成年。) else echo 你的年龄为:%age% ,未成年。
pause

运行结果:

4. if elseif else语句

if else只能处理2个条件分支,如果有多个条件就需要用到if elseif else语句;

实例:通过输入水果名称查水果价格

@echo off
set /p name=输入商品名称:
if "%name%" == "苹果" (
    echo 苹果的价格是5元/个!
) else if "%name%" == "香蕉" (
    echo 香蕉的价格是2元/根!
) else if "%name%" == "榴莲" (
    echo 榴莲的价格是40元/斤!
) else if "%name%" == "芒果" (
    echo 芒果的价格是8元/个!
) else (
    echo 无%name%的价格
)
pause
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ITPro进化论

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值