• if


    -----siwuxie095

       

       

    if

    执行批处理程序中的条件处理

       

    语法:

    IF [NOT] ERRORLEVEL number command

    IF [NOT] string1==string2 command

    IF [NOT] EXIST filename command

       

    参数说明:

    NOT 指定只有条件为 false 的情况下,Windows 才

    应该执行该命令。

       

    ERRORLEVEL number 如果最后运行的程序返回一个等于或大于

    指定数字的退出代码,指定条件为 true。

       

    string1==string2 如果指定的文字字符串匹配,指定条件为 true。

       

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

       

    command 如果符合条件,指定要执行的命令。如果指定的

    条件为 FALSE,命令后可跟 ELSE 命令,该命令将

    在 ELSE 关键字之后执行该命令。

       

       

       

       

       

       

       

    IF的三个格式

    1)结果判断:IF [NOT] ERRORLEVEL number do command

    (2)比对判断:IF [NOT] string1==string2 do command

    3)存在判断:IF [NOT] EXIST filename do command

       

       

       

    1IF [NOT] ERRORLEVEL number do command

    if errorlevel 这个句子必须放在某个命令的后面,执行该命令后才由if errorlevel

    来判断命令的返回值number,其取值范围是 0~255,返回值大于等于指定值时,

    条件成立。

       

    即:

    if errorlevel 0 如果返回值大于等于0,即前面的程序执行成功

    if errorlevel 1 如果返回值大于等于1,即前面的程序执行失败,

    失败原因有多种,不同失败有不同的失败代码

    if not errorlevel 0 如果返回值小于0,即前面的程序执行失败,

    不常用,由于errorlevel不可能小于0,所以无论如何程序

    都不会执行后面的语句

    if not errorlevel 1 如果返回值小于1,即前面的程序执行成功,

    也不常用,不如 if errorlevel 0 更加直接

       

    使用 errorlevel 时,一般用 0 表示成功,用 1 表示失败。但也可以用

    0~255的任意一个数值表示 errorlevel。

       

    如:查看C盘根目录

    @echo off

    dir c:

    if errorlevel 1 goto 1

    if errorlevel 0 goto 0

    exit

    :0

    echo 命令执行成功

    goto exit

    :1

    echo 命令执行失败

    goto exit

    :exit

    pause

       

    sublime中:

       

       

    运行一览:

       

       

       

    再如:查看电脑中不存在的Z盘的根目录

    @echo off

    dir z:

    if errorlevel 0 goto success

    if errorlevel 1 goto fail

    exit

    :success

    echo 命令执行成功

    goto exit

    :fail

    echo 命令执行失败

    goto exit

    :exit

    pause

       

    sublime中:

       

       

    运行一览:

       

       

    此程序无论执行成功与否,都显示"命令执行成功 !"

    因为errorlevel的取值范围是0~255,无论程序执行结果如何,

    if errorlevel 0 总是成立,都会 goto success。将上下两个 if

    互换位置即可

       

    sublime中:

       

       

    运行一览:

       

       

       

       

       

    还可以采用 IF %ERRORLEVEL% == number do command 的形式来确切比对,

    这样就不用考虑顺序问题

    (其实和 IF [NOT] string1==string2 do command 一样)

    @echo off

    dir c:

    if %errorlevel% == 0 goto 0

    if %errorlevel% == 1 goto 1

    :0

    echo 命令执行成功

    goto exit

    :1

    echo 命令执行失败

    goto exit

    :exit

    pause

       

    sublime中:

       

       

       

       

    (2)IF [NOT] string1==string2 do command

       

    注意:比对字符时,大小写也会严格比对

       

    if string1==string2 do command

    如果 string1 和 string2 相同 ,则执行 command

       

    if not string1==string2 do command

    如果 string1 和 string2 不同 ,则执行 command

       

       

    用 "/i "开关忽略大小写,才会认为 "A=a" :

       

    if /i string1==string2 do command

    忽略大小写,如果 string1 和 string2 相同,则执行 command

       

    if /i not string1==string2 do command

    忽略大小写,如果 string1 和 string2 不同,则执行 command

       

    ("== "前面和后面可以有空格,也可以没有空格)

       

       

    特别注意:string1或string2中任何一个字符串出现了空格,比较

    就不能继续下去,程序会自动退出。为避免这种情况,可以采用

    加双引号的形式:

    if [not] "string1"=="string2" command

       

    包含空格在内的整个字符串的比对,即空格也会被当成符号来比对。

    所有的比对都应采用这种加引号的形式,确保万无一失(除非比较

    纯数字的大小,不宜加双引号,避免被认为是字符串比对)

       

    上面的仅仅是格式,实际在程序中的书写形式为:

    if [not] %string1%==%string2% command

    if [not] "%string1%"=="%string2%" command

       

    如:不加引号的比对

    @echo off

    SET /P a=请输入 string1

    set /p b=请输入 string2

    if %a%==%b% goto fist

    if not %a%==%b% goto second

    exit

    :fist

    echo 两个字符串相同

    pause

    exit

    :second

    echo 两个字符串不同

    pause

    exit

       

    sublime中:

       

       

    运行一览:

       

       

       

       

    再如:加引号的比对(可以比对带空格的字符串)

    @echo off

    SET /P a=请输入 string1

    set /p b=请输入 string2

    if "%a%"=="%b%" goto fist

    if not "%a%"=="%b%" goto second

    exit

    :fist

    echo 两个字符串相同

    pause

    exit

    :second

    echo 两个字符串不同

    pause

    exit

       

       

    sublime中:

       

       

       

    运行一览:

       

       

       

       

    (所有字符串的比对最好都带上引号,避免因为空格导致程序错误退出)

       

    再如:

    @echo off

    set string1=abcdefg

    set string2=1234567

    if not %string1%==%string2% (echo 不同) else (echo 相同)

    pause

       

       

    sublime中:

       

       

    运行一览:

       

       

       

       

       

    3IF [NOT] EXIST filename do command

    用于判断存在情况

    if exist filename do command 如果存在,执行 command

    if not exist filename do command 如果不存在,执行 command

       

    如:F盘根目录下是否存在 abc.txt

    @echo off

    if exist "F:abc.txt" echo 文件存在

    if not exist "F:abc.txt" echo 文件不存在

    pause

       

    sublime中:

       

       

       

       

    IF 增强的用法 :

    IF [/I] string1 compare-op string2 command

    IF CMDEXTVERSION number command

    IF DEFINED variable command

    其中/I 是忽略大小写,有了/I,程序会认为 A=a

       

       

    IF [/I] string1 compare-op string2 command

    常用的数学符号在批处理中已有特殊意义和用途,批处理中重新

    定义了这些符号:

    equ

    等于

    neq

    不等于

    lss

    小于

    leq

    小于或等于

    gtr

    大于

    geq

    大于或等于

    /i

    忽略大小写

       

       

    如:

    @echo off

    set /p a=请输入 string1:

    set /p b=请输入 string2:

    if %a% equ %b% goto first

    if %a% lss %b% goto second

    if %a% gtr %b% goto third

    exit

    :first

    echo string1 等于 string2

    pause

    goto end

    :second

    echo string1 小于 string2

    pause

    goto end

    :third

    echo string1 大于 string2

    pause

    :end

    exit

       

    sublime中:

       

       

       

    这种不加引号的形式,纯数字的比较会将字符转换为数值比较,

    包含字母数字的比较则不会转换,且从左到右,只比较第一个不同的

    字符的大小

       

    如果加引号,纯数字的比较也不会将字符转换为数值比较,依然是

    从左到右,只比较第一个不同的字符的大小(如:出现 3 大于 13

       

       

       

    如:

    @echo off

    set /p var=随便输入个命令:

    %var%

    if %errorlevel% == 0 (echo %var%执行成功了) else echo %var%执行失败了

    pause

       

    sublime中:

       

       

    或者:

       

       

       

    运行一览:

       

       

       

       

       

       

    IF CMDEXTVERSION number command

       

    如:

    @echo off

    xcopy F:abc.txt E:

    if cmdextversion 1 echo 文件拷贝失败

    if cmdextversion 0 echo 文件拷贝成功

    pause

       

    sublime中:

       

       

    这里,cmdextversion 条件的作用同 errorlevel

       

       

       

    IF DEFINED variable command

    用来判断变量是否存在

    如果变量已定义或存在,就运行 command 命令

       

    如:

    @echo off

    set str1=ok

    set str2=no

    if defined str1 (echo str1 已经被定义) else echo str1 没有被定义

    if defined str2 (echo str2 已经被定义) else echo str2 没有被定义

    if defined str3 (echo str3 已经被定义) else echo str3 没有被定义

    pause

       

    sublime中:

       

       

    运行一览:

       

       

       

    再如:读入任意字符串,计算并输出字符串的长度

    @echo off

    set num=0

    set /p str=请输入任意字符串:

    if not defined str (

    echo 您没有输入任何内容

    pause>nul & exit

    )

    :len

    set /a num+=1

    set str=%str:~0,-1%

    if defined str goto len

    echo 字符串长度为 %num%

    pause>nul

       

    sublime中:

       

       

    运行一览:

       

       

       

       

       

    循环结构

    if 和 goto 构成的循环结构

    如:

    @echo off

    set num=1

    :begin

    if not %num%==5 (

    echo %num%

    set /a num+=1

    goto begin

    )

    pause

       

       

    sublime中:

       

       

    运行一览:

       

       

       

       

       

    IF ELSE 语句

       

    if 才是批处理命令,而 else 不是,所以无法单独执行 else

    而批处理的执行是认行不认命令数目,所以 else 必须和 if 在同一行上

       

    左括号 ( 不是批处理命令,无法单独执行 ( ,所以左括号

    必须和上面命令同行

    而右括号 ) 是回应前面离它最近的左括号,所以它可以位于

    程序的任何地方

       

    如:判断输入是否是字母 a

    @echo off

    rem word和后面的等号 = 之间不能有空格,否则赋值不成功

    set /p word=请输入一个字母

    rem 注意:"a" 和后面的左括号间必须有空格,否则程序直接退出,无法运行

    rem 注意:else 和前后的左、右括号间必须有空格,否则程序直接退出,无法运行

    rem else if 在同一行时(没有嵌套),else后的括号可加可不加,建议加上

    if /i "%word%" == "a" (echo a) else (echo not a)

    pause

       

    或者

    @echo off

    rem word和后面的等号 = 之间不能有空格,否则赋值不成功

    set /p word=请输入一个字母

    rem 注意:"a" 和后面的左括号间必须有空格,否则程序直接退出,无法运行

    rem if 左括号 必须在同一行,if的右括号 无所谓

    if /i "%word%" == "a" (echo a

    rem if的右括号、elseelse的左括号必须在同一行,且三者必须有空格相隔

    rem else的右括号 无所谓

    ) else (

    echo not a

    )

    pause

       

       

    sublime中:

       

       

    或者

       

       

       

       

    关于嵌套:

       

       

       

       

    使用 if 时的注意事项:

       

    1、在 DOS 中,if 每次只能判断一个条件,无法判断多条件,即无

    法进行 与、或、异或 等判断。

       

    如果要用到 与、或 条件判断 ,程序写法:

    与: if 条件A if 条件B do something

    或: if 条件A do something if 条件B do something

       

       

    2、(1)if 和 if的左括号 必须在同一行

    2)if的条件语句 和 if的左括号 之间必须有空格

    3)if的右括号 和 else 和 else的左括号 必须在同一行,且三者间必须有空格

       

       

    3、if 语句不会进行运算

    如:这个程序无法执行

    @echo off

    set /p num=请输入数字:

    if %num%%%5== 0 echo %num%可以被 5 整除

    pause

       

    sublime中:

       

    必须分开写:

    @echo off

    set /p num=请输入数字:

    set /a panduan=%num%%%5

    if %panduan% == 0 echo %num%可以被 5 整除

    pause

       

    sublime中:

       

       

    4、下面的代码1的写法不科学,只输入回车时程序错误,自动退出

    代码1

    @echo off

    set /p var=(Y/N):

    if /i %var%==Y (echo Yes) else (echo No)

    pause

       

    sublime中:

       

       

    代码2:加引号,只输入回车,正确执行,输出 NO

    @echo off

    set /p var=(Y/N):

    if /i "%var%"==Y (echo Yes) else (echo No)

    pause

       

    sublime中:

       

       

       

       

    【made by siwuxie095】

       

       

       

       

       

  • 相关阅读:
    SpringBoot-Swagger
    SpringBoot-Shiro
    SpringBoot-SpringSecurity
    SpringBoot-整合数据库
    SpringBoot-Web开发
    SpringBoot-基础
    SpringMVC-文件上传和下载
    SpringMVC-拦截器
    SpringMVC-AJAX
    Eclipse的安装
  • 原文地址:https://www.cnblogs.com/siwuxie095/p/6291455.html
Copyright © 2020-2023  润新知