Chinaunix首页 | 论坛 | 博客
  • 博客访问: 841572
  • 博文数量: 63
  • 博客积分: 1317
  • 博客等级: 中尉
  • 技术积分: 686
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-30 22:07
文章分类

全部博文(63)

文章存档

2015年(4)

2014年(1)

2013年(1)

2012年(2)

2011年(54)

2010年(1)

我的朋友

分类: Python/Ruby

2011-07-14 22:06:18

原文地址:
具体内容:
《批处理入门手册》

三.高级语句篇

----------------------------------------------------------------------------------------------------------------------

3.1 学习if条件语句



学习要点:

5种if语句的基本语法:

1。判断两个字符串是否相等,if "字符串1"=="字符串2" command 语句;

2。判断两个数值是否相等,if 数值1 equ 数值2 command 语句;

3。判断判断驱动器,文件或文件夹是否存在,if exist filename command 语句;

4。判断变量是否已经定义,if defined 变量 command 语句;

5。判断上个命令的返回值,if errorlevel 数值 command 语句。

补充1:if not 语句。

----------------------------------------------------------------------------------------------------------------------



1。判断两个字符串是否相等,if"字符串1"=="字符串2" command 语句

注意:在"字符串1"=="字符串2"中,是两个连续的"="



例1,

@echo off

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

set /p var2=请输入第二个比软的字符:

if "%var1%"=="%var2%" (echo 输入的两个字符相同) else echo 输入的两个字符不相同

pause

执行后会要求你输入两个字符串,然后批处理判断它俩是否相同。

在判断字符串是否相等的时候,if是会区分大小写的,请看,



例2,

@echo off

if "a"=="A" (echo 输入的两个字符相同) else echo 输入的两个字符不相同

pause

执行后会显示:输入的两个字符不相同

如果我们不想让它区分大小写,则可以加上/i 参数。再看下面这个例子,


例3,

@echo off

if /i "a"=="A" (echo 输入的两个字符相同) else echo 输入的两个字符不相同

pause

这次执行后会显示:输入的两个字符相同





2。判断两个数值是否相等,if 数值1 equ 数值2 command 语句

语句中的equ 表示相等的意思,判断两个数值之间的大小关系还有以下关系符号:

中文含义       关系符       英文解释

等于            equ          equal

大于            gtr          greater than

大于或等于      geq          greater than or equal

小于            lss           less than

小于或等于      leq          less than or equal

不等于          neq          no equal


我们还是来看个例子,

例4,

@echo off

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

if %var% geq 10 (echo 此数大于或等于10) else echo 此数小于10

pause

注意哦,批处理中的大于号,小于号,等于号等等都不能用:“>”  “<”  “=” 这些符号,而要用像"gtr"这类的。


☆注意:if 比较字符串与比较数字 之间的区别

它们的区别体现在引号""上面,请看下面的例子

【example 1】

@echo off

if "12" lss "4" (echo 12竟然小于4哦?) else echo 12当然不会小于4的!

pause


执行的结果是:12竟然小于4哦?


【example 2】

@echo off

if 12 lss 4 (echo 12竟然小于4哦?) else echo 12当然不会小于4的!

Pause


执行的结果是:12当然不会小于4的!


为什么【example 1】中加了双引号""会出错呢?


原因如下:

如果要比较的两个元素加了双引号"",那么会被当成是字符的比较。两个元素作比较的流程是:先比较两个元素的首位,如果首位相同,再比较第二位,如果第二 位相同,再比较第三位。。。依此,在【example 1】if "12" lss "4" 语句中,实质是1与4的比较,1当然小于4,所以执行了后面的命令:echo 12竟然小于4哦?


☆建议:如果是字符串的比较就使用双引号"" 是数字的比较就不用双引号了!



3。判断判断驱动器,文件或文件夹是否存在,if exist filename command 语句

我们来瞧瞧这个判断驱动器,文件或者文件夹是否存在的语句,这里if exist filename 是表示:存在 filename的意思。

例5,

@echo off

if exist "e:" (echo e盘存在) else echo e盘不存在

pause>nul

这里是判断e: 是否存在!

例6,

@echo off

if exist d:\123.bat (echo 123.bat文件存在!) else echo 123.bat文件不存在!

pause



这个例子是用来判断123.bat文件是否存在的,但并不严谨!如果123.bat是一个文件夹而不是一个文件时,上面的判断就不行了!那么如何判断指定的文件123.txt是否存在?请看:

@echo off

dir /a-d d:\123.bat >nul 2>nul

if %errorlevel%==0 (echo 123.bat文件存在!) else echo 123.bat文件不存在!

Pause


先用dir的/a-d参数去除123.bat的目录属性,指定说明要搜索的123.bat是文件而不是文件夹,并把结果(包括正确和错误)屏蔽 (>nul 2>nul),如果dir找到了文件123.bat,那么其errorlevel值(dir命令的退出编码)会被设为0,否则为1则是没有此文件。 当然也可以用||和&&来判断。关于为什么要用if %errorlevel%==0 而不用if errorlevel 0呢?在后面if errorlevel中会有说明!

例7,

@echo off
if exist test\ (echo test 是文件夹) else echo test 是文件
pause



这里是判断文件夹是否存在。对于文件夹存在的判断,我们不可以用以下两种写法:

第①种

@echo off
if exist test\. (echo test 是文件夹) else echo test 是文件
pause


第②种

@echo off
if exist test\nul (echo test 是文件夹) else echo test 是文件
pause





4。判断变量是否已经定义,if defined 变量 command 语句

这是一个判断变量是否已被定义的语句,我们还是先看例子,

例8,

@echo off

if defined a (echo 变量 a 已定义) else (echo 变量 a 没有被定义)

pause

执行后显示:变量 a 没有被定义

例9,

@echo off

set a=

if defined a (echo 变量 a 已定义) else (echo 变量 a 没有被定义)

pause

执行后显示:变量 a 没有被定义



注意:set a=这后面是没有空格的。



例10,

@echo off

set a=10

if defined a (echo 变量 a 已定义) else (echo 变量 a 没有被定义)

pause

执行后显示:变量 a 已定义



看了上面三个例子,你应该发现点什么了吧?现在我们应该知道了:当变量不存在或是值为空时,变量则为未定义。

当我们用if defined 变量 command 语句判断变量是否被定义时,请注意 变量 为不使用引导符号%的变量名,不能用写为%变量%,否则出错。


大家来试一下下面的这两个例子,

例11,

@echo off

set var1=5

if defined var1 (echo 变量var1已定义) else (echo 变量var1没有被定义)

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

if defined %var2% (echo 变量var2已定义) else (echo 变量var2没有被定义)

pause



例12,

@echo off

set var1=5

if defined var1 (echo 变量var1已定义) else (echo 变量var1没有被定义)

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

if defined var2 (echo 变量var2已定义) else (echo 变量var2没有被定义)

pause


注意例11和例12哦:一个是%var2%而另一个是var2


5。判断上个命令的反回值,if errorlevel 数值 command 语句

这个语句是用于判断上一个命令执行的返回值errorlevel,我们还是先来看看例子,

例13,

@echo off

net user

if %errorlevel% == 0 (echo net user 命令执行成功) else (echo net user 命令执行失败)

Pause

注意:%errorlevel%  这是个系统变量,所以用两个%括起来,这里的==为两个连续的=

也许有些朋友说我上面的例子是不是写错了?按照语法应该写成“if errorlevel 0”才对的呀。

如果你是这样用的话,那你就错了,还真不信呀?OK,我们来设计个实验看看

例14,

@echo off

set /p input=请输入任意一条命令:

if errorlevel 0 (echo %input% 命令执行成功) else (echo %input% 命令执行失败)

pause

用这种语法,不管你前面的命令,是否执行成功,它都会认为命令成功了。何解?



if errorlevel  语句的特点:

当使用  if errorlevel 0 cmmand 句式时,它的含义是:如果返回的错误码值大于或等于0 的时候,将执行cmmand操作;

当使用  if %errorlevel%==0 cmmand 句式时,它含义是:如果返回的错误码值等于0 的时候,将执行cmmand操作。

一般上一条命令的执行结果返回的值只有两个,"成功"用0 表示 "失败"用 1 表示,实际上,errorlevel 返回值可以在0~255 之间,

例如xcopy 默认的errorlevel 值就有5 个,分别表示5 种执行状态:

0复制文件成功
1 未找到复制文件
2 用户通过CTRL+C 终止了xcopy操作
4 出现了初始化错误  
5 出现了磁盘写入错误





对于if 条件语句,常用的也就上面那5条吧,下面我们来看一下它的两种格式:

if条件语句的完整格式是:if 条件表达式 (语句1) else (语句2)

它的含义是:如果 条件表达式 成立,就执行 语句1,否则,将执行 语句2。­  else后的 语句2 也可以不用括号括起。

if条件语句的简单格式是:if 条件表达式 (语句)

它的含义是:如果 条件表达式 成立,将执行 语句,否则,什么都不做。条件表达式后的 语句 也可以不用括号括起。

例15,

@echo off

if exist "d:\123.txt" (del "d:\123.txt")

pause

你也可以写成下面这样哦~

例16,

@echo off

if exist "d:\123.txt" "d:\123.txt"

pause





补充1:if not 语句

对于if 语句前面的5种基本语法,都可以加上not参数,如

1。if not "字符串1"=="字符串2" command 语句;

2。if not数值1 equ 数值2 command 语句;

3。If not exist filename command 语句;

4。if not defined 变量 command 语句;

5。if not errorlevel 数值 command 语句。


在if 条件表达式 (语句) 语句,如没有not参数,默认是判断条件成立时,执行语句;如有not参数,判断条件失败时,执行语句。



我们看一下下面的例子:



例17,

@echo off

if exist "c:\" (echo  C盘存在) else echo  C盘不存在

pause

执行后显示:C盘存在


例18,

@echo off

if not exist "c:\" (echo  C盘存在) else echo  C盘不存在

pause

执行后显示:C盘不存在

不会吧,例18中执行后显示:C盘不存在,这简值是在说瞎话了,那到底是什么回事呢?


if not exist "c:\" (echo  C盘存在) else echo  C盘不存在

此语句中文意思:如果不存在C:\ 就执行显示C盘存在;否则<指的是存在C:\>就执行显示C盘不存在。

注:if exist 意为如果存在,那么if not exist就是如果不存在


你的C盘当然是实实在在存在的啦,根椐上面的中文分得知,那执行例18后就显示为:C盘不存在  通过分析例18,你应该明白if语句中not参数是怎么用了吧!
阅读(37146) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~