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】

   

   

   

   

   

原文地址:https://www.cnblogs.com/siwuxie095/p/6291455.html