IF条件语句

批处理是通过IF ELSE来实现条件语句的。

既然是批处理“程序”,我们就会经常需要用到,条件判断和分支,我们希望我们的程序更智能,不是只会傻傻的执行命令,然后报错,而是能知道不同情况下该如何自己解决问题。

幸好批处理为我们提供了IF这个简单而强大的命令,赶快做一个看看。

5 条件语句和分支结构_batch

在cmd中输入if /?打开系统帮助,我们会看到if的三种基本用法:

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

NOT               指定只有条件为 false 的情况下, Windows XP 才应该执行该命令。

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

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

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

command           如果符合条件,指定要执行的命令。如果指定的条件为 FALSE,命令后可跟一个执行 ELSE关键字后的命令的 ELSE 命令。

ELSE 子句必须在 IF 之后出现在同一行上。例如:

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

第一种用法:

IF [NOT] ERRORLEVEL number command

首先我们需要了解什么是errorlevel

errorlevel是程序返回码,每个命令运行结束,会根据情况,重置返回码的值,默认值是0,一般执行出错会设置errorlevel为1,注意,只是一般情况,而且这个一般并不算非常多的情况,很多程序会根据自己的规则,设置为其他数字

看个例子:

@echo off
net user
IF %ERRORLEVEL% == 0 echo net user
执行成功了!
Pause

这是个简单判断上条命令是否执行成功.

等等,帮助上的意思好像是应该写成“if %errorlevel% 0 echo net user执行成功了!”啊,结果你真的这么写,会发现,不管对错,都会执行“echo net user执行成功了!”,为啥呢?这不是个bug,而是因为“if %errorlevel% 0”的意思是如果%errorlevel%大于等于0的时候。你通常可以用“if %errorlevel% 1”来表示非零的错误情况,当然我建议你用“if not ”

种用法:

IF [NOT] string1==string2 command

这个呢就是用来比较变量或者字符的值是不是相等的.

例子

@echo off

set /p var=请输入第一个比较字符:

set /p var2=请输入第二个比较字符:

if %var% == %var2% (echo 我们相等) ELSE echo 我们不相等

pause

上面这个例子可以判断你输入的值是不是相等,但是你如果输入相同的字符,但是如果其中一个后面打了

一个空格,

这个例子还是会认为相等,如何让有空格的输入不相等呢?我们在比较字符上加个双引号就可以了.

@echo off

set /p var=请输入第一个比较字符:

set /p var2=请输入第二个比较字符(多输入个空格试试):

if "%var%" == "%var2%" (echo 我们相等) ELSE echo 我们不相等

pause

当然,这条命令格式还有其他增强用法,比如

IF [/I] string1 compare-op string2 command
加上 /I就可以不区分大小写了!

你还可以用它来判断数字,你会用到这些数学符号:

EQU - 等于
NEQ - 不等于
LSS - 小于
LEQ - 小于或等于
GTR - 大于
GEQ - 大于或等于

Q.EQU==有什么区别么?

A.==是用来比较字符串的,而EQU是用来比较数字,“1==1”意味着将两个1作为字符串处理,而“1 EQU 1”意味着通过数学比较它们两者。

第三种用法:

IF [NOT] EXIST filename command

这个就是判断某个文件或者文件夹是否存在的语法

例子

@echo off
if exist "c:\test" (echo 存在文件) ELSE echo 不存在文件
pause

判断的文件路径加引号是为了防止路径有空格,如果路径有空格加个双引号就不会出现判断出错了!

如果你需要判断文件不存在,你可以在if后面加上not
if not exist "c:\test" (echo 不存在文件) ELSE echo 存在文件
这里,说到else,我们建议你这么写

if exist “c:\test”(
echo 存在文件
)else(
echo 不存在文件

这样写可以帮助你实现在if…else里执行更多命令,或者嵌套命令,并且,看起来也更清晰