最近发现有些朋友一老问IF命令的用法,IF命令个人觉得很简单,所以就一直没把发放到新手教学贴里说,现在我给补上一文,希望对各位"非常BAT的"新手朋友们有所帮助.
现在开始:
在CMD使用IF /?打开IF的系统帮助(自己看我就不全部列出来了),我们会发现IF有3种基本的用法!
执行批处理程序中的条件处理。
IF [NOT] ERRORLEVEL number command
IF [NOT] string1==string2 command
IF [NOT] EXIST filename command
   NOT             指定只有条件为 false 的情况下, Windows XP 才
                   应该执行该命令。
   ERRORLEVEL number 如果最后运行的程序返回一个等于或大于
                   指定数字的退出编码,指定条件为 true。
   string1==string2   如果指定的文字字符串匹配,指定条件为 true。
   EXIST filename 如果指定的文件名存在,指定条件为 true。
   command           如果符合条件,指定要执行的命令。如果指定的
                  条件为 FALSE,命令后可跟一个执行 ELSE
                  关键字后的命令的 ELSE 命令。
ELSE 子句必须在 IF 之后出现在同一行上。例如:
IF EXIST filename (
       del filename
) ELSE (
       echo filename missing
)
第一种用法:IF [NOT] ERRORLEVEL number command
这个用法的基本做用是判断上一条命令执行结果的代码,以决定下一个步骤.
一般上一条命令的执行结果代码只有两结果,"成功"用0表示   "失败"用1表示.
举个例子:
@echo off
net user
IF %ERRORLEVEL% == 0 echo net user 执行成功了!
pause
这是个简单判断上条命令是否执行成功.
细心的朋友可能会发现,这个用法和帮助里的用法不太一样,按照帮助里的写法"IF %ERRORLEVEL% == 0 echo net user 执行成功了!   "这一句代码应该写成:IF ERRORLEVEL 0 echo net user 执行成功了!
那为什么我要写成这样呢?各位自己把代码改掉执行后,就会发现错误了!用这种语法,不管你的上面的命令是否执行成功,他都会认为命令成功了,不知道是BUG还是本人理解错误...
补充:这不是bug,而是 if errorlevel 语句的特点:当使用 if errorlevel 0 …… 的句式时,它的含义是:如果错误码的值大于或等于0的时候,将执行某个操作;当使用 if %errorlevel%==0 …… 的句式时,它的含义是:如果错误码的值等于0的时候,将执行某操作。因为这两种句式含义的差别,如果使用前一种句式的时候,错误码语句的排列顺序是从大到小排列
%ERRORLEVEL% 这是个系统变量,返回上条命令的执行结果代码! "成功"用0表示   "失败"用1表示. 当然还有其他参数,用的时候基本就这两数字.
一般上一条命令的执行结果代码只有两结果,"成功"用0表示   "失败"用1表示
  这只是一般的情况,实际上,errorlevel返回值可以在0~255之间,比如,xcopy默认的errorlevel值就有5个,分别表示5种执行状态:
退出码 说明
0 文件复制没有错误。
1 if errorlevel 2 echo。
2 用户按 CTRL+C 终止了 xcopy。
4 出现了初始化错误。没有足够的内存或磁盘空间,或命令行上输入了无效的驱动器名称或语法。
5 出现了磁盘写入错误。
要判断上面xcopy命令的5种退出情况,应写成:
if errorlevel 5 echo出现了磁盘写入错误
if errorlevel 4 echo出现了初始化错误
if errorlevel 2 echo用户按 CTRL+C 终止了 xcopy
if errorlevel 1 echo if errorlevel 2 echo
if errorlevel 0 echo文件复制没有错误。
才能正确执行。
补充完毕。

再举几个例子给新手理解
@echo off
net usertest
IF %ERRORLEVEL% == 1 echo net user 执行失败了!
pause
这个是判断上一条命令是否执行失败的
@echo off
set /p var=随便输入个命令:
%var%
if %ERRORLEVEL% == 0 goto yes
goto no
:yes
echo !var! 执行成功了
pause
exit
:no
echo 基本上执行失败了..
pause
这个是根据你输入的命令,自动判断是成功还是失败了!

在来一个简化版的
@echo off
set /p var=随便输入个命令:
%var%
if %ERRORLEVEL% == 0 (echo %var%执行成功了) ELSE echo %var%执行失败了!
pause
else后面写上执行失败后的操作!
当然我门还可以把if else这样的语句分成几行写出来,使他看上去好看点...
@echo off
set /p var=随便输入个命令:
%var%
if %ERRORLEVEL% == 0   (
echo !var! 执行成功了
) ELSE (
echo 基本上执行失败了..
)
pause

这里介绍的两种简写对IF的三种语法都可以套用,不单单是在IF [NOT] ERRORLEVEL number command
这种法上才能用

第二种用法:IF [NOT] string1==string2 command
这个呢就是用来比较变量或者字符的值是不是相等的.
例子
@echo off
set /p var=请输入第一个比较字符:
set /p var2=请输入第二个比较字符:
if %var% == %var2% (echo 我们相等) ELSE echo 我们不相等
pause
上面这个例子可以判断你输入的值是不是相等,但是你如果输入相同的字符,但是如果其中一个后面打了一个空格,
这个例子还是会认为相等,如何让有空格的输入不相等呢?我们在比较字符上加个双引号就可以了.
@echo off
set /p var=请输入第一个比较字符:
set /p var2=请输入第二个比较字符(多输入个空格试试):
if "%var%" == "%var2%" (echo 我们相等) ELSE echo 我们不相等
pause

第三种用法:IF [NOT] EXIST filename command
这个就是判断某个文件或者文件夹是否存在的语法
例子
@echo off
if exist "c:\test" (echo 存在文件) ELSE echo 不存在文件
pause
判断的文件路径加引号是为了防止路径有空格,如果路径有空格加个双引号就不会出现判断出错了!
这个语法没什么太多的用法,基本就这样了,就不多介绍了.
另外我们看到每条IF用法后都有个[NOT]语句,这啥意思?其他加上他的话,就表示先判断我们的条件不成立时,
没加他默认是先判断条件成立时,比如上面这个例子
@echo off
if not exist "c:\test" (echo 存在文件) ELSE echo 不存在文件
pause
加个NOT,执行后有什么结果,如果你的C盘下根本就没c:\test,他还是会显示"存在文件",这就表示了加了NOT就
会先判断条件失败!懂了吧,上面例子改成这样就正确了!
@echo off
if not exist "c:\test" (echo 不存在文件) ELSE echo 存在文件
pause

第四种用法:IF增强的用法
   IF [/I] string1 compare-op string2 command
   IF CMDEXTVERSION number command
   IF DEFINED variable command
后面两个用法,我不做介绍,因为他们和上面的用法表示的意义基本一样,只简单说说   IF [/I] string1 compare-op string2 command这个语句在判断字符时不区分字符的大小写。
CMDEXTVERSION 条件的作用跟 ERRORLEVEL 的一样,除了它
是在跟与命令扩展名有关联的内部版本号比较。第一个版本
是 1。每次对命令扩展名有相当大的增强时,版本号会增加一个。
命令扩展名被停用时,CMDEXTVERSION 条件不是真的。
如果已定义环境变量,DEFINED 条件的作用跟 EXISTS 的一样,
除了它取得一个环境变量,返回的结果是 true。

@echo off
if a == A (echo 我们相等) ELSE echo 我们不相等
pause
执行后会显示:我们不相等
@echo off
if /i a == A (echo 我们相等) ELSE echo 我们不相等
pause
加上/I不区分大小写就相等了!
最后面还有一些用来判断数字的符号
EQU - 等于
NEQ - 不等于
LSS - 小于
LEQ - 小于或等于
GTR - 大于
GEQ - 大于或等于
我就举一个例子,大家都懂数学...不讲多了
@echo off
set /p var=请输入一个数字:
if %var% LEQ   4 (echo 我小于等于4) ELSE echo 我不小于等于4
pause


第6章 if命令讲解相关推荐

  1. DOS批处理高级教程:第三章 FOR命令中的变量(转)

    DOS批处理高级教程:第一章 批处理基础 DOS批处理高级教程:第二章 DOS循环for命令详解 DOS批处理高级教程:第三章 for命令中的变量 DOS批处理高级教程:第四章 批处理中的变量 DOS ...

  2. java如何监控cpu耗时_超级干货:3个性能监控和优化命令讲解

    原标题:超级干货:3个性能监控和优化命令讲解 小编为大家整理出了三个有关性能监控和优化命令详细讲解,别看只有三个,但不影响他噎啊,本篇文章很长,涉及top命令.free命令和 vmstat命令,真的是 ...

  3. Linux 基础命令讲解--加密解密

    Linux 基础命令讲解--加密解密 加密文件: 1.MD5 echo -n "string" | openssl md5   #加密字符串 openssl md5 -in tes ...

  4. 类 workbooks 的 open 方法无效_第十九章 Cach 命令大全 OPEN 命令

    第十九章 Caché 命令大全 OPEN 命令 获取输入/输出操作的设备或文件的所有权. 重点 打开设备要指定延迟秒,否则将无限等待. 大纲 OPEN:pc device:(parameters):t ...

  5. 第四章 Linux命令

    第四章 Linux命令 第一节 常用命令 ls    列出当前目录下的内容 参 数 : -1          列出文件或目录的详细信息(不包括以.开头的隐藏文件) -a或--all   列出所有文件 ...

  6. 第六章 SQL命令 CREATE INDEX(一)

    文章目录 第六章 SQL命令 CREATE INDEX(一) 大纲 参数 描述 权限与锁 仅支持兼容性选项 索引名称 现有索引 表明 字段名称 嵌入对象中的字段(`%SerialObject`) 索引 ...

  7. 第三章 SQL命令 ALTER USER

    文章目录 第三章 SQL命令 ALTER USER 大纲 参数 描述 权限 示例 第三章 SQL命令 ALTER USER 修改用户密码. 大纲 ALTER USER user-name IDENTI ...

  8. 第十六章 SQL命令 CREATE TABLE(三)

    文章目录 第十六章 SQL命令 CREATE TABLE(三) 字段数据约束 NULL和NOT NULL UNIQUE DEFAULT DEFAULT Keywords ON UPDATE Colla ...

  9. 第二十二章 SQL命令 CREATE TRIGGER(二)

    文章目录 第二十二章 SQL命令 CREATE TRIGGER(二) SQL触发器代码 ObjectScript触发代码 字段引用和伪字段引用 引用流属性 引用SQLComputed属性 标签 方法调 ...

最新文章

  1. 【1863】畅通工程 (HDU)
  2. LSTM之父再称ResNet、GAN等五大网络都有他的功劳,网友却说:自负大于引用数
  3. 【深度学习】拉格朗日( Lagrange)中值定理
  4. sleep interrupted异常_Java高并发3中断线程以及isInterrupted与interrupted区别
  5. java闭锁_java8中CountDownLatch闭锁
  6. SQL中两个表的某列相减
  7. [Windows编程] 通过GetModuleHandleEx 得到函数调用者所在的DLL/EXE 原创陈本峰2009-02
  8. left join 和 inner join
  9. linux-文件类型与查看文件型
  10. OAuth2.0_介绍_Spring Security OAuth2.0认证授权---springcloud工作笔记137
  11. 三星电子首次公布李在镕薪酬 看起来一点儿也不高
  12. 用vscode做markdown编辑器(借助Markdown All in One)
  13. 计算机网络数据通信基础题,数据通信基础练习题(含答案)
  14. 不知道如何管理眼镜店?这款管理软件帮助你搞定所有烦恼!
  15. 关于计算机网络ppt背景图片,ppt怎么换背景图片
  16. 杰奇cms,杰奇cms程序,杰奇cms建站方法
  17. 论文写作笔记7 大纲outline写作方法
  18. android imgView.setImageBitmap(bitmap) 空白图片
  19. GMM算法的个人理解
  20. 国防科大计算机优势,报考国防科技大学的优缺点,你知道的有多少?

热门文章

  1. 微软 Build 2019 对开发者意味着什么?
  2. 微软神操作!Web 版 VS Code 来了!
  3. 华为效仿苹果卖高价手机?滴滴顺风车开放灰度测试;苹果官微被投诉“攻陷”| 极客头条...
  4. 知名社交网络 Myspace 丢失 12 年用户数据,大型系统究竟如何做迁移?
  5. 程序员必须掌握的 12 个 JavaScript 技能!
  6. 深度防范,如何应对区块链安全问题?
  7. 有谁还记得“开源”已经20年了!
  8. 联想r720内存频率_锐龙H真给劲儿 联想拯救者R7000 2020首测
  9. 西门子s7 计算机通讯,PLC与计算机通讯连接
  10. linux 树状目录代码,Linux tree - 以树状图列出目录的内容