批处理教程:条件语句

在Windows批处理编程中,条件语句是很基本且常用的语句,在编写稍微大一点点的bat程序,都会有条件判断。bat程序中也是通过关键字if语句来表示条件语句,与其他高级语言一样。

什么是条件语句?

条件语句是用来判断给定的条件是否满足(表达式值是否为0),并根据判断的结果(真或假)决定执行的语句,选择结构就是用条件语句来实现的。

条件语句可以给定一个判断条件,并在程序执行过程中判断该条件是否成立,根据判断结果执行不同的操作,从而改变代码的执行顺序,实现更多的功能。

下图为条件语句的基本流程:

批处理教程:条件语句

条件语句-非(not)

非运算即取反运算。如果在条件表达式中,条件表达式原本计算的返回值为true,则取非则为false。在BAT中取非很简单,直接在条件判断前加not,例如:

@echo off
REM 下面输出OK
if 1==1 echo Ok

REM 下面不输出OK
if not 1==1 echo Ok

条件语句-与(and)

条件语句的与运算要求参与运算的表达式都返回true,则整个表达式才能为true。如果其中有一个子表达式返回false,则整个表达式返回false。与运算的算法如下:
True & True = True

True & False = False

False & True = False

False & False = False

在BAT批处理程序中,没有提供直接的运算符支持。例如:在java中我们通过&&符号来表示与,如:

int age = 25;
if ( age >= 18 && age < 65) {
    System.out.println("哎!还要继续工作...");
}

Bat批处理程序中,我们可以通过if嵌套if语句的方式来实现与运算。实例如下:

@echo off
REM 输出OK
if 1==1 if 2==2 echo Ok

REM 不输出,因为2==3返回false,则整个表达式为false
if 1==1 if 2==3 echo Ok

较为清晰的写法:

@echo off
REM 输出OK
if 1==1 (if 2==2 echo Ok)

REM 不输出,因为2==3返回false,则整个表达式为false
if 1==1 (if 2==3 echo Ok)

相当于Java的如下写法:

if (1==1) {
    if (2==2) {
        // echo Ok
         System.out.println("Ok");
    }
}

条件语句-或(or)

条件语句或运算实现起来就比较繁琐了,网上可找到如下几种:

(1)用多个if嵌套的;

(2)用2个条件语句给一个变量赋值,再判断该变量的;

(3)用for循环的。

上面这些做法都显得太麻烦。其实,直接用GOTO语句最简单,只要满足1个条件,就直接调用满足条件的语句,毋需像Java或C语言一样试图将条件用逻辑判断关键字来归并,如:

// java
if (condition1 or condition2 or condition3) {
     // ...
}

例如:下面的程序借用goto语句实现只输入1个参数或2个参数都不输入时,打印帮助信息:

@echo off
if "%1"=="" goto printHelp
if "%2"=="" goto printHelp
goto continueApp

REM 输出帮助信息
:printHelp
@echo This is a help message, please refere to ...
goto end

REM 继续业务处理
:continueApp

REM 退出程序
:end

注意: 如果if条件判断为命令,而不是子程序,则这样写会导致重复执行多次的问题。例如:

@echo off
if "%1"=="" echo aaaaaaaaaaaaaaaaaa
if "%2"=="" echo bbbbbbbbbbbbbbbbbb
if "%3"=="" echo cccccccccccccccccc

如果不想用子程序,也可以采用if嵌套的写法,if嵌套相对来说较为清晰一点:

(1) 不用子程序

@echo off
if "%1"=="" (echo 1st param null) else (if "%2"=="" (echo 2sd param null) else (if "%3"=="" echo 3th param null) )

(2) 用子程序

@echo off
if "%1"=="" (goto printHelp) else (if "%2"=="" (goto printHelp) else (if "%3"=="" goto printHelp) )

相当于Java的这样的写法(伪码):

if("%1"==""){
    printHelp();
    return;
} else{
    if("%2"==""){
        printHelp();
        return;
    } else {       
        if("%3"==""){
            printHelp();
            return;
        }
    }
}

参考资料:

https://blog.csdn.net/chijiandi/article/details/79022473

https://blog.csdn.net/hongweigg/article/details/60868917

学习,学习,再学习!学,然后知不足。 —— 列宁
0 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号