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 errorlevel1goto1

if errorlevel0goto0

exit

:0

echo命令执行成功

goto exit

:1

echo命令执行失败

goto exit

:exit

pause

  

sublime中:

  

  

运行一览:

  

  

  

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

@echo off

dir z:

if errorlevel0goto success

if errorlevel1goto 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% == 0goto0

if%errorlevel% == 1goto1

: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%执行成功了)elseecho%var%执行失败了

pause

  

sublime中:

  

  

或者:

  

  

  

运行一览:

  

  

  

  

  

  

IF CMDEXTVERSION number command

  

如:

@echo off

xcopy F:\abc.txt E:\

if cmdextversion 1echo文件拷贝失败

if cmdextversion 0echo文件拷贝成功

pause

  

sublime中:

  

  

这里,cmdextversion 条件的作用同 errorlevel

  

  

  

IF DEFINED variable command

用来判断变量是否存在

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

  

如:

@echo off

set str1=ok

set str2=no

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

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

if defined str3 (echo str3 已经被定义) elseecho 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==0echo%num%可以被5整除

pause

  

sublime中:

  

必须分开写:

@echo off

set /p num=请输入数字:

set /a panduan=%num%%%5

if%panduan% == 0echo%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】

  

  

  

  

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值