if 的用法详解

命令格式1:if [NOT] ERRORLEVEL number command
命令格式2:if [NOT] string1==string2 command
命令格式3: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的综合使用案例

例1、查询成绩对应的等级
@echo off
:start
set mark=
set /p mark=请输入成绩:
if %mark% gtr 100 (
call echo 请重新输入成绩!
pause>nul&cls
goto :start
)else if %mark% geq 90 (
 set level=优秀
)else if %mark% geq 80 (
 set level=良好
)else if %mark% geq 70 (
 set level=中等
)else if %mark% geq 60 (
 set level=及格
)else set level=不及格
echo 你的等级是:%level%
choice /m 是否退出
if %errorlevel%==1 goto :eof
if %errorlevel%==2 cls&goto :start
 

CMD批处理(3)——批处理选择语句结构的更多相关文章

  1. 批处理学习:for语句详解【经典】

    大纲 一 前言 二 for语句的基本用法 三 for /f (delims.tokens.skip.eol.userbackq.变量延迟) 四 for /r (递归遍历) 五 for /d (遍历目录 ...

  2. 【转】dos下 和 批处理中的 for 语句的基本用法

    for 语句的基本用法 : 最复杂的for 语句,也有其基本形态,它的模样是这样的:   在cmd 窗口中:for %I in (command1) do command2 在批处理文件中:for % ...

  3. dos下 和 批处理中的 for 语句的基本用法

    for 语句的基本用法 : 最复杂的for 语句,也有其基本形态,它的模样是这样的:   在cmd 窗口中:for %I in (command1) do command2 在批处理文件中:for % ...

  4. 批处理学习:for语句详解

    大纲 一 前言 二 for语句的基本用法 三 for /f (delims.tokens.skip.eol.userbackq.变量延迟) 四 for /r (递归遍历) 五 for /d (遍历目录 ...

  5. 转载解决:错误的语法:”XXXX“必须是批处理中仅有的语句

    SQL Server 数据库提示“错误的语法:”XXXX“必须是批处理中仅有的语句”报错的原因分析 解析:批处理必须以 CREATE 语句开始.也就是说一个查询分析器里面只有一个批处理语句才是规范的语 ...

  6. 解决:错误的语法:”XXXX“必须是批处理中仅有的语句

    原文:解决:错误的语法:”XXXX“必须是批处理中仅有的语句   SQL Server 数据库提示“错误的语法:”XXXX“必须是批处理中仅有的语句”报错的原因分析 解析:批处理必须以 CREATE ...

  7. 错误的语法:"create view必须是批处理中仅有的语句"

    编写脚本提示: 错误的语法:"create view必须是批处理中仅有的语句" FROM sys.views WHERE name = 'v_CS_UserRoleNames' ) ...

  8. C语言结构选择语句

    总结一下常用的if else与switch,其中switch中的break知识点是笔试题经常考到的内容. if else与else if 在C语言中,经常使用if else选择语句,来实现很多对应的功 ...

  9. [SQL Server 视图的创建- (create view必须是批处理中仅有的语句问题)]

    当我们SQL Server在创建视图时 ,会出现"create view 必须是批处理中仅有的语句"这个语法错误提示 ,实际上这本身没什么错! 因为create view 必须是批 ...

随机推荐

  1. Django(32)自定义过滤器

    前言 虽然DTL给我们内置了许多好用的过滤器.但是有些时候还是不能满足我们的需求.因此Django给我们提供了一个接口,可以让我们自定义过滤器,实现自己的需求. 自定义过滤器 首先在某个app中,创建 ...

  2. [刷题] 1016 部分A+B (15分)

    思路 以字符串形式接收 遍历字符串,组装数据,输出结果 #include <iostream> using namespace std; int main() { string a, b; ...

  3. [Linux] Linux C编程一站式学习 Part.3

    Linux系统编程 文件与I/O C标准I/O库函数与Unbuffered I/O函数 C标准I/O库函数printf().putchar().fputs(),会在用户空间开辟I/O缓冲区 系统函数o ...

  4. linux基础之基础命令一

    本节内容: 1. ls:列出当前目录下的文件和目录 -l: 长输出,显示文件的详细信息(-普通文本,d目录) -a: 显示所有文件,包括隐藏文件 -h: 人类易读(-lh) -d: 显示目录信息(-l ...

  5. CSS 重置技术

    元素默认样式显示问题 每个浏览器对不同元素都有自己的默认样式.Google Chrome 渲染正文标题.段落.列表等,与 IE 浏览器可能都有所不同.这就导致同一个页面元素在不同的浏览器中显示效果不一 ...

  6. http keep-alive 的一些理解

    在日常的工作中涉及到了关于检测用户是否在线的功能需求,在方案设计过程中考虑过使用http-keepalive的方式,由于我们获取到的keepalive是经过nginx转发的keep-alive,所以最 ...

  7. 三:.net core(.NET 6)给swagger添加文档注释详细步骤

    提供swagger文档注释. 0.先给api加上标题注释和返回值注释: 然后,启动见证奇迹: What the hell?没得注释?查看当前自动生成的swagger代码如下: 首先,我们需要对需要注释 ...

  8. 写Bug时,需要注意的几点3

    在对象之间搬移特性 类往往会因为承担过多责任而变得臃肿不堪. (Move Method)搬移函数 含义:在程序中,里面的一个函数与其类外面的一个类或函数有着紧密的调用或者被调用,则需要对其函数内部的表 ...

  9. SpringMVC=>web.xml基本配置

    <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmln ...

  10. 【源码解析】阿里在线诊断工具greys源码

    撸起袖子加油干!开门见山! 一.源码下载 下载代码: git clone https://github.com/oldmanpushcart/greys-anatomy.git 二.源码分析 2.1 ...