批处理 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 [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
阅读全文
0 0
- 批处理 if
- 批处理中的IF ERRORLEVEL
- Dos批处理之IF
- 批处理IF命令详解
- 批处理中的if语句
- 批处理if 命令示例详解
- bat批处理 if 命令示例详解
- IF执行批处理程序中的条件处理:
- 批处理中if的四种用法
- bat批处理 if 命令示例详解
- DOS批处理命令之if命令
- [WIN][BAT]常用批处理命令----for,if,call,errorlevel,start
- DOS 批处理命令(Batch commands)使用说明 If 命令
- 批处理基础:if判断输入参数是否空
- windows bat (批处理)——IF详解
- 菜鸟级别批处理命令IF~ELSE语法问题
- 批处理基础:if判断输入参数是否空 (copied)
- windows bat(批处理)——IF详解
- 【NLP】层次HMM-Viterbi角色标注模型下的机构名识别
- Error:svn: E175002: connection refused by the server svn
- springboot错误 java.lang.IllegalArgumentException:No converter found for return value of type
- Android进阶六:Databinding的双向绑定
- 如何在 iOS 中解决循环引用的问题
- 批处理 if
- Aras Innovator: AML包
- Visual Studio 调试常用20个小技巧
- 彻底理解I/O架构
- YTU.3131: 进阶递归之简单的整数划分问题
- environment variable 'STAGING_DIR' not defined
- c++ 简单进程交互(获取双方进程句柄)
- Hibernate+spring缓存机制配置
- ASP.NET使用JQUERY AJAX文件上传DEMO_异步文件上传例子