批处理教程:基础语法之IF语句

Bat中的if语句用于处理条件结构。类似于java中的if-else语句,只有当if中指定的条件为true时,则执行if语句内部的数据,如果为false,则执行else中的语句。

总的来说,if 命令是一个表示判断的命令,根据得出的每一个结果,它都可以对应一个相应的操作。关于它的三种用法, 在这里分开讲。

语法:

if 和 if not 有都有3中形势:

IF [NOT] ERRORLEVEL number do command 

IF [NOT] string1 == string2 do command 

IF [NOT] EXIST filename do command

说明:

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

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

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

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

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

(1)、输入判断

if "%1" == "" goto usage
if "%1" == "/?" goto usage
if "%1" == "help" goto usage

这里判断输入的参数情况,如果参数为空,则跳转到 usage;如果参数为“/?”或 “help”时,也跳转到usage 。这里还可以用否定形式来表示"不等于", 例如 :

if not "%1" == "" goto usage

则表示如果输入参数不为空就跳转到usage是不是很简单?。

(2)、存在判断

if exist C:\Progra~1\Tencent\AD\*.gif del C:\Progra~1\Tencent\AD\*.gif

如果存在那些 gif 文件, 就删除这些文件。 注意,这里的条件判断是判断存在的, 当然也可以判断不存在的,例如下面这句"如果不存在那些gif文件则退出脚本":

if not exist C:\Progra~1\Tencent\AD\*.gif exit

只是多一个 not 来表示否定而已。

(3)、结果判断

masm %1.asm
if errorlevel 1 pause & edit %1.asm
link %1.obj

先对源代码进行汇编,如果失败则暂停显示错误信息, 并在按任意键后自动进入编辑界面;否则用 link 程序连接生成的 obj 文件。这里只介绍一下和 if命令有关的地方,&命令后面会讲到。这种用法是先判断前一个命令执行后的返回码(也叫错误码,DOS 程序在运行完后都有返回码),如果和定义的错误码符合(这里定义的错误码为 1 ),则执行相应的操作(这里相应的操作为pause & edit %1.asm 部分)。另外, 和其他两种用法一样, 这种用法也可以表示否定。 用否定的形式仍表达上面三句的意思,代码变为:

masm %1.asm
if not errorlevel 1 link %1.obj
pause & edit %1.asm

看到本质了吧?其实只是把结果判断后所执行的命令互换了一下,"if not errorlevel 1" 和"if errorlevel 0" 的效果是等效的,都表示上一句masm 命令执行成功(因为它是错误判断,而且返回码为0,0 就表示否定,就是说这个错误不存在, 就是说 masm 执行成功)。 这里是否加 not,错误码到底用 0还是 1,是值得考虑的两个问题,一旦搭配不成功脚本就肯定出错,所以一定要体会的很深刻才行。如何体会的深刻?练习!自己写一个脚本,然后把有 not和没有 not 的情况, 返回码为 0 或 1 的情况分别写进去执行,这样从执行的结果中就能很清楚的看出这两种情况的区别。这种用 errorlevel 结果判断的用法是 if 命令最难的用法,但也恰恰是最有用的用法,如果你不会用 errorlevel 来判断返回码,则要达到相同的效果,必须用else 来表示"否则"的操作,是比较麻烦的。以上代码必须变成:

masm %1.asm
if exist %1.obj link %1.obj
else pause & edit %1.asm
成熟不是人的心变老,而是泪在眼眶里打转还能微笑。
0 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号