批处理 if

来源:互联网 发布:2017流行的网络歌曲 编辑:程序博客网 时间:2024/06/10 07:56
执行批处理程序中的条件处理。


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 关键字之后执行该命令。


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


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


由于 del 命令需要用新的一行终止,因此以下子句不会有效:


IF EXIST filename. del filename. ELSE echo filename. missing


由于 ELSE 命令必须与 IF 命令的尾端在同一行上,以下子句也
不会有效:


    IF EXIST filename. del filename.
    ELSE echo filename. missing


如果都放在同一行上,以下子句有效:


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


如果命令扩展被启用,IF 会如下改变:


    IF [/I] string1 compare-op string2 command
    IF CMDEXTVERSION number command
    IF DEFINED variable command


其中, compare-op 可以是:


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


而 /I 开关(如果指定)说明要进行的字符串比较不分大小写。
/I 开关可以用于 IF 的 string1==string2 的形式上。这些
比较都是通用的;原因是,如果 string1 和 string2 都是
由数字组成的,字符串会被转换成数字,进行数字比较。


CMDEXTVERSION 条件的作用跟 ERRORLEVEL 的一样,除了它
是在跟与命令扩展有关联的内部版本号比较。第一个版本
是 1。每次对命令扩展有相当大的增强时,版本号会增加一个。
命令扩展被停用时,CMDEXTVERSION 条件不是真的。


如果已定义环境变量,DEFINED 条件的作用跟 EXIST 的一样,
除了它取得一个环境变量,返回的结果是 true。


如果没有名为 ERRORLEVEL 的环境变量,%ERRORLEVEL%
会扩充为 ERROLEVEL 当前数值的字符串表达式;否则,您会得到
其数值。运行程序后,以下语句说明 ERRORLEVEL 的用法:


    goto answer%ERRORLEVEL%
    :answer0
    echo Program had return code 0
    :answer1
    echo Program had return code 1


您也可以使用以上的数字比较:


    IF %ERRORLEVEL% LEQ 1 goto okay


如果没有名为 CMDCMDLINE 的环境变量,%CMDCMDLINE%
将在 CMD.EXE 进行任何处理前扩充为传递给 CMD.EXE 的原始
命令行;否则,您会得到其数值。


如果没有名为 CMDEXTVERSION 的环境变量,
%CMDEXTVERSION% 会扩充为 CMDEXTVERSION 当前数值的
字串符表达式;否则,您会得到其数值。
::if语句::if语句实现条件判断,包括字符串比较、存在判断、定义判断等。通过条件判断,if语句即可以实现选择功能。::字符串比较::if语句仅能够对两个字符(串)是否相同、先后顺序进行判断等。其命令格式为:::IF [not] string1 compare-op string2 command1 [else command2]::其中,比较操作符compare-op有以下几类:::== - 等于::EQU - 等于::NEQ - 不等于::LSS - 小于::LEQ - 小于或等于::GTR - 大于::GEQ - 大于或等于::选择开关/i则不区分字符串大小写;选择not项,则对判断结果进行逻辑非。::字符串比较示例::===============================================@echo offset str1=abcd1233set str2=ABCD1234if %str1%==%str2% (echo 字符串相同!) else (echo 字符串不相同!)if /i %str1% LSS %str2% (echo str1^<str2) else (echo str1^>=str2)echo.set /p choice=是否显示当前时间?(y/n)if /i not %choice% EQU n echo 当前时间是:%date% %time%pause>nulREM ===============================================REM 对于最后一个if判断,当我们输入n或N时的效果是一样的,都不会显示时间。如果我们取消开关/i,则输入N时,依旧会显示时间。REM 另外请注意一下几个细节 1-echo str1^<str2和echo str1^>=str2;2-echo.。REM 存在判断REM 存在判断的功能是判断文件或文件夹是否存在。其命令格式为REM IF [NOT] EXIST filename command1 [else command2]REM ===============================================@echo offif exist %0 echo 文件%0是存在的!if not exist %~df0 (echo 文件夹%~df0不存在!) else echo 文件夹%~df0存在!pause>nulREM ===============================================REM 这里注意几个地方REM 存在判断既可以判断文件也可以判断文件夹;REM %0即代表该批处理的全称(包括驱动器盘符、路径、文件名和扩展类型);REM %~df0是对%0的修正,只保留了其驱动器盘符和路径,详情请参考for /?,属高级批处理范畴;REM 注意if语句的多行书写,多行书写要求command1的左括号必须和if在同一行、else必须和command1的右括号同行、REM command2的左括号必须与else同行、command1和command2都可以有任意多行,即command可以是命令集。REM 定义判断REM 定义判断的功能是判断变量是否存在,即是否已被定义。其命令格式为REM IF [not] DEFINED variable command1 [else command2]REM 存在判断举例REM ===============================================@echo offset var=111if defined var (echo var=%var%) else echo var尚未定义!set var=% %if defined var (echo var=%var%) else echo var尚未定义!pause>nulREM ===============================================REM 对比可知,set var=可以取消变量,收回变量所占据的内存空间。REM 结果判断masm %1.asmif errorlevel 1 pause & edit %1.asmlink %1.objREM 先对源代码进行汇编,如果失败则暂停显示错误信息,并在按任意键后自动进入编辑界面;REM 否则用link程序连接生成的obj文件,这种用法是先判断前一个命令执行后的返回码(也叫错误码,DOS程序在运行完后都有返回码),REM 如果和定义的错误码符合(这里定义的错误码为1),则执行相应的操作(这里相应的操作为pause & edit %1.asm部分)。REM 另外,和其他两种用法一样,这种用法也可以表示否定。用否定的形式仍表达上面三句的意思,代码变为masm %1.asmif not errorlevel 1 link %1.objpause & edit %1.asm

原创粉丝点击