bat批处理 if 命令示例详解

bat批处理 if 命令示例详解

If,和E中的意思一样,是“如果”的意思,用来做条件判断。翻译的意思是:如果满足某个条件,就会执行下面这个命令。

目录

使用if命令判断前一个命令的退出代码。使用if命令判断文件是否存在。使用if命令比较字符串。if命令的知识点(1)可变延时扩展。if命令的知识点(2)删除重复行。下面是一些辅助if命令的例子。

If,和E中的意思一样,是“如果”的意思,用来做条件判断。翻译的意思是:如果满足某个条件,就会执行下面这个命令。

主要用来判断

1.两个“弦”是否相等;

2.两个值分别是大于、小于和等于,然后执行相应的命令。

当然也有特殊用途,比如结合误差等级:if误差等级1回声误差。

Or与defined组合:如果defined test(echo it is defined)else echo it is not defined。

使用 if 命令判断上一条命令的退出代码

左括号的左边需要空格。

Else需要在右边留一个空格,建议在左边留一个空格。

右括号、else和左括号需要放在同一行。

@关闭回声

回声www.jb51.net | findstr jb51

if %errorlevel% equ 0(

Echo找到了指定的字符串。

)else(

Echo没有找到指定的字符串。

)

中止

Errorlevel 0确定Errorlevel是否大于或等于0。

@关闭回声

回声www.jb51.net | findstr jb51

如果错误级别1(

Echo没有找到指定的字符串。

)else(

Echo找到了指定的字符串。

)

中止

但是将if errorlevel 0放在前面在逻辑上是错误的。

如果错误级别为0(

Echo找到了指定的字符串。

)否则如果错误级别1(

Echo没有找到指定的字符串。

)

使用 if 命令判断文件是否存在

没有反斜杠,if exist命令不能直接区分文件和文件夹。

判断文件夹的时候在最后加上反斜线

@关闭回声

如果存在“C:Program Files”(

Echo文件夹存在。

)else(

回显文件夹不存在。

)

中止

判断文件的时候先排除文件夹

If表示不满足条件时执行命令。

@关闭回声

如果不存在 1.txt (

如果存在 1.txt (

回显文件存在

)else(

回显文件不存在。

) )

中止

使用 if 命令进行字符串比较

使用==确定两个字符串或数字是否相等。

如果1==1,则回显是

if a==a 回显yes

使用/i忽略字母的大小写。

if a==A 回显yes

if /i a==A echo yes

比较数字时不要用双引号。

使用双引号后,就会变成字符串比较。

如果2 gtr 10回应是

如果“2”GTR“10”回应是

比较操作符

当量

neq

小于

等效声级

gtr

geq

平等的

不相等

不到

小于或等于

大于

大于或等于

胜任

不等于

不到

小于或等于

比.更大

大于或等于

批处理if命令字符串比较和ASCII的关系

数字比字母少。

同样的字母,小写字母比大写字母小。

不同的字母,按照字母表的顺序排列。

延伸阅读

https://www.jb51.net/article/223121.htm

http://bbs.bathome.net/thread-12314-1-1.html

http://bbs.bathome.net/thread-12329-1-1.html

if命令知识点(1)变量延迟扩展

复合语句需要启用可变延迟扩展。

写错了

@关闭回声

设置VAR=before

如果 %VAR%==在 (

设置VAR=after

如果“(

Echo重新分配成功。

)else(

回声重新分配失败。

) )

中止

正确的写作

@关闭回声

setlocal enabledelayedexpansion

设置VAR=before

如果 %VAR%==在 (

设置VAR=after

如果!VAR!==之后 (

Echo重新分配成功。

)else(

回声重新分配失败。

) )

中止

写错了

@关闭回声

对于%%i in (C:Windows*。exe) do(

设置列表=%list% %%i

)

回显%列表%

中止

正确的写作

@关闭回声

setlocal enabledelayedexpansion

对于%%i in (C:Windows*。exe) do(

设置列表=!列表!%%i

)

回显%列表%

中止

批处理中变量的延迟扩展和嵌套

http://bbs.bathome.net/thread-2899-1-1.html

if命令知识点(2)删除重复行

使用if defined命令删除文本中的重复行。

@关闭回声

for /f delims= %%i in (1.txt) do(

如果没有定义_%%i(

回声,%%i

设置“_%%i=1”

) )

中止

C:type 1.txt

论坛

浴室

浴室

C:test.bat

论坛

浴室

请按任意键继续。

这种方法不适合处理非常大的文件,也不能处理包含等号的行。请参考:

http://bbs.bathome.net/thread-4690-1-1.html

下面是一些补充

使用示例:

1.检测字符串(注意当用if检测字符串是否相等时,不是“=”,而是“==”):

@关闭回声

set str=这是一个测试

REM检测变量%str%是否等于test,如果等于,则显示OK,否则显示NO。

if %str%==test (回显OK)否则回显NO

波瑟努尔

2.检测值:(注意,在批处理中,不能使用大于号: "",而是 gtr ,其他类似)

比较运算符一览:

EQU-平等

NEQ-不等于

less不到

less小于或等于

GTR-大于

GEQ-大于或等于

检查值20是否大于15。演示代码:

@关闭回声

设置/a num1=20

set /a num2=15

如果%num1% gtr %num2% echo %num1%大于%num2%

如果%num1% EQU %num2%回声%num1%等于%num2%

如果%num1% LSS %num2%回声%num1%小于%num2%

波瑟努尔

3.如果与errorlevel一起使用:

注意:环境变量errorlevel的初始值是0。当某些命令执行不成功时,它会返回一个数值,如1、2等。

如果-错误级别

测试代码:

@关闭回声

XCOPY F:test.bat D:

错误级别1回显文件复制失败。

错误级别0回显成功复制了文件

如果文件复制成功,屏幕会显示“复制文件成功”;否则,将显示“复制文件失败”。

错误级别用于测试其最后一个DOS命令的返回值。注意只是最后一条命令的返回值,返回值必须按照从大到小的顺序判断。

因此,下面的批处理文件是错误的:

@关闭回声

XCOPY C:AUTOEXEC。蝙蝠D:

错误级别0回显成功复制了文件

错误级别1 echo没有找到副本文件。

错误级别2回显用户通过ctrl-c中止复制操作.

错误级别3回显预设错误阻止文件复制操作。

如果级别4回显,则在复制期间写入磁盘时出错

无论复制是否成功,以下内容:

找不到复制文件。

用户通过ctrl-C中止复制操作。

预设阻止文件复制操作时出错。

复制期间写入磁盘时出错

将会显示。

附录:

以下是以下常见命令的返回值及其含义:

支持

0备份成功。

1找不到备份文件。

2文件共享冲突阻止备份完成。

3用户使用Ctrl-C中止备份。

由于致命错误,备份操作中止。

磁盘组件

0磁盘比较是一样的

1光盘比较不同

2用户通过Ctrl-C中止比较操作。

由于致命错误,比较操作中止。

4预设错误中止比较。

磁盘拷贝

0磁盘复制操作成功。

1个非致命的磁盘读/写错误

2用户通过Ctrl-C结束复制操作。

由于致命的处理错误,磁盘复制被中止。

4预设错误阻止复印操作。

格式

0已成功格式化。

3用户通过Ctrl-C停止格式化过程。

4由于致命的处理错误,格式化被中止。

5在提示“是否继续格式化(y/n)?”时下一个用户键入n结束。

xcopy

0成功复制了文件。

1找不到副本文件。

2用户通过Ctrl-C中止复制操作。

4预设错误阻止文件复制操作。

5复制过程中写入磁盘时出错

4.if的另一个特殊用法是它可以用来检查一个变量是否已经被定义。

使用示例:

@关闭回声

设置“str1=ok”

设置“str2=否”

如果定义了str1,则回显str1已被定义

如果已定义str2,则回显str2已被定义

如果定义了str3 (echo str3已定义)否则echo str3未定义。

波瑟努尔

待续.

bat批处理 if 命令示例详解