首页 > BAT教程 :第六节(if命令讲解)

BAT教程 :第六节(if命令讲解)

最近发现有些朋友一老问IF命令的用法,IF命令个人觉得很简单,所以就一直没把发放到新手教学贴里说,现在我给补上一文,希望对各位"非常BAT的"新手朋友们有所帮助.

现在开始:

在CMD使用IF/?打开IF的系统帮助(自己看我就不全部列出来了),

IF[NOT]ERRORLEVEL number command

IF[NOT]string1==string2 command

IF[NOT]EXIST filename command

首先来讲第一种用法IF[NOT]ERRORLEVEL number command

这个用法的基本做用是判断上一条命令执行结果的代码,以决定下一个步骤.

一般上一条命令的执行结果代码只有两结果,"成功"用0表示  "失败"用1表示.

举个例子:

@echo off

net user

IF%ERRORLEVEL%==0 echo net user

pause

这是个简单判断上条命令是否执行成功.

细心的朋友可能会发现,这个用法和帮助里的用法不太一样,按照帮助里的写法"IF %ERRORLEVEL% == 0 echo net user 执行成功了!  "这一句代码因该写成:IFERRORLEVEL 0 echo net user

那为什么我要写成这样呢?各位自己把代码改掉执行后,就会发现错误了!用这种语法,不管你的上面的命令是否执行成功,他都会认为命令成功了,不知道是BUG还是本人理解错误...

%ERRORLEVEL%这是个系统变量,"成功"用0表示  "失败"用1表示.当然还有其他参数,用的时候基本就这两数字.

在举几个例子给新手理解

@echo off

net usertest

IF%ERRORLEVEL%==1 echo net user

pause

这个是判断上一条命令是否执行失败的

@echo off

set/p var=随便输入个命令:

%var%

if%ERRORLEVEL%==0gotoyes

gotono

:yes

echo!执行成功了

pause

exit

:no

echo 基本上执行失败了..

pause

这个是根据你输入的命令,

在来一个简化版的

@echo off

set/p var=随便输入个命令:

%var%

if%ERRORLEVEL%==0(echo%var%执行成功了)ELSEecho%var%

pause



当然我门还可以把if else这样的语句分成几行写出来,使他看上去好看点...

@echo off

set/p var=随便输入个命令:

%var%

if%ERRORLEVEL%==0  (

   echo!执行成功了

   )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 我们相等)ELSEecho 我们不相等

pause

上面这个例子可以判断你输入的值是不是相等,但是你如果输入相同的字符,但是如果其中一个后面打了一个空格,

这个例子还是会认为相等,如何让有空格的输入不相等呢?我们在比较字符上加个双引号就可以了.

@echo off

set/p var=请输入第一个比较字符:

set/p var2=请输入第二个比较字符(多输入个空格试试):

if"%var%"=="%var2%"(echo 我们相等)ELSEecho 我们不相等

pause

第三种用法IF[NOT]EXIST filename command

这个就是判断某个文件或者文件夹是否存在的语法

例子

@echo off

ifexist"c: est"(echo 存在文件)ELSEecho 不存在文件

pause

判断的文件路径加引号是为了防止路径有空格,

这个语法没什么太多的用法,基本就这样了,就不多介绍了.

另外我们看到每条IF用法后都有个[NOT]语句,这啥意思?其他加上他的话,就表示先判断我们的条件不成立时,

没加他默认是先判断条件成立时,比如上面这个例子

@echo off

ifnotexist"c: est"(echo 存在文件)ELSEecho 不存在文件

pause

加个NOT,执行后有什么结果,如果你的C盘下更本就没c:test,他还是会显示"存在文件",这就表示了加了NOT就

会先判断条件失败!懂了吧,

@echo off

ifnotexist"c: est"(echo 不存在文件)ELSEecho 存在文件

pause

另外IF还有一些增强的用法,如下

  IF[/I]string1 compare-op string2 command

  IFCMDEXTVERSION number command

  IFDEFINED variable command

后面两个用法,我不做介绍,因为他们和上面的用法表示的意义基本一样,只简单说说  IF[/I]string1 compare-op string2 command这个语句在判断字符时不区分字符的大小写,看这两个例子

@echo off

ifa==A(echo 我们相等)ELSEecho 我们不相等

pause

执行后会显示我们不相等

@echo off

if/i a==A(echo 我们相等)ELSEecho 我们不相等

pause

加上/

最后面还有一些用来判断数字的符号

EQU-等于

NEQ-不等于

LSS-小于

LEQ-小于或等于

GTR-大于

GEQ-大于或等于

我几举一个例子,大家都懂数学...不讲多了

@echo off

set/p var=请输入一个数字:

if%var%LEQ  4(echo 我小于等于4)ELSEecho 我不小于等于4

pause

更多相关:

  • #include #include #include #include #include #include #include

  • 题目:表示数值的字符串 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100"、"5e2"、"-123"、"3.1416"、"0123"及"-1E-16"都表示数值,但"12e"、"1a3.14"、"1.2.3"、"+-5"及"12e+5.4"都不是。 解题: 数值错误的形式有多种多样,但是正确的...

  • 加法伺候  //超过20位数值相加---------------------------------------- function bigNumAdd(a, b) {if (!(typeof a === "string" && typeof b === "string")) return console.log("传入参数必...

  • 业务场景: 从中文字句中匹配出指定的中文子字符串 .这样的情况我在工作中遇到非常多, 特梳理总结如下. 难点: 处理GBK和utf8之类的字符编码, 同时正则匹配Pattern中包含汉字,要汉字正常发挥作用,必须非常谨慎.推荐最好统一为utf8编码,如果不是这种最优情况,也有酌情处理. 往往一个具有普适性的正则表达式会简化程...

  • 简单record 一下 #include // 'struct sockaddr_in' #include #include // 'struct ifreq' and 'struct if_nameindex' #include #inc...

  • 在某些情况下(例如通过网络访问数据),常常不希望程序卡住而占用太多时间以至于造成界面假死。在这时、我们可以通过Thread、Thread + Invoke(UI)或者是 delegate.BeginInvoke 来避免界面假死,但是这样做时,某些代码或者是某个方法的执行超时的时间还是无法操控的。那么我们又是否有一种比较通用的方法、来设...

  • 传参 如果程序执行的时候需要加入参数,如 ./sample aa bb 使用 gdb 的时候可以使用如下方式 gdb --args ./sample aa bb 执行 启动 gdb 之后,直接使用 r,就是 run 的意思,或者可以使用 b 加一个断点进行调试。处理信号 如果在使用的时候,遇到类似下面的报错 Threa...

  • 进程的图文形象表示 阮一峰–进程与线程的一个简单解释 多进程实质 现在,多核CPU已经非常普及了,但是,即使过去的单核CPU,也可以执行多任务。由于CPU执行代码都是顺序执行的,那么,单核CPU是怎么执行多任务的呢? 答案就是操作系统轮流让各个任务交替执行,任务1执行0.01秒,切换到任务2,任务2执行0.01秒,再切换到任务...

  • redis 事物: Redis 事物的实现: 首先 wath监控键值 myKey开启批量执行 multi,执行命令入列,执行 exec 。如果监控的键值mykey 没有被修改过,则exec 中批量执行的命令成功,否则执行失败。无论执行成功与否,都会执行取消wath的执行  Redis multi 批量执行,是先把批量中的命令放入队列...

  • 一、准备工作: 1.登录服务器,切换到root用户(su - root,然后输入密码,按enter),进入根目录:cd / 2.进入要安装jdk的目录,自己可以创建一个java目录,执行命令如下: cd /usr/local/ mkdir java 二、下载安装包 1.打开官网下载界面:https://www.oracle.com/...

  • 毕业之际给学校搭建了基于ATS的正向代理缓存服务器,专门用来处理优酷土豆等在线视频流量。通过改写一个浏览器做成在线视频专用浏览器,内置了ATS的代理设置。 用php配合memcacheq和小脚本实现了简单的异步预热功能,在实际运用中安全性请自行考虑完善。 工作方式:PHP页面提交URL——>memcacheq<——shell脚...

  • 好久不写shell脚本,有些生疏。总结下shell的语法,以便后续参考,快速捡起来。 shell 脚本执行的3种方式: 1). ./xx.sh (xx.sh 需要有执行权限) 2). source xx.sh 3). bash xx.sh 变量定义 var=2 //注意:=左右没有空格 变量引用的2种方式 $符号就是变量解引用...

  • 作者:荒原之梦 原文链接:http://zhaokaifeng.com/?p=538 前言: “Ping”属于ICMP协议(即“Internet控制报文协议”),而ICMP协议是TCP/IP协议的一个子协议,工作在网际层。ICMP协议主要用于传输网络是否连通、主机是否可达以及路由是否可用等控制信息。Ping可以回显TTL生存...

  • 前言:俗话说的好,懒是第一生产力,懒是提高生产效率的必要条件。而现今windows是大部分人的第一生产工具,批处理+定时任务这对黄金搭档就是提升生产效率的第一工具。大家在生产过程中经常会遇到各种周期性的重复的工作,比如我现在每天都会更换最新的jar包并重启tomcat,linux服务器我们可以用shell+crontab,而windo...

  •   Linux 登陆服务器敲命令太多,某时候确实不便,所以就用shell写了一个  我的blog地址: http://www.cnblogs.com/caoguo   一.说明 支持秘密和密钥两种格式用户名和密码都是写文件的,明文保存二.配置 密码文件配置:序号:IP:端口:用户:密码:说明 1:192.168.88.128:22:...