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 \pause
你也可以写成下面这样 例16
@echo off
if exist \pause
补充1:if not 语句
对于if 语句前面的5种基本语法,都可以加上not参数,如 1。if not \字符串1\字符串2\语句; 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 \盘存在) else echo C盘不存在 pause
执行后显示:C盘存在 例18 @echo off
if not exist \盘存在) else echo C盘不存在 pause
执行后显示:C盘不存在
不会吧,例18中执行后显示:C盘不存在,这简值是在说瞎话了,那到底是什么回事呢?
if not exist \盘存在) else echo C盘不存在
此语句中文意思:如果不存在C:\\ 就执行显示C盘存在;否则<指的是存在C:\\>就执行显示C盘不存在。
注:if exist 意为如果存在,那么if not exist就是如果不存在。
你的C盘当然是实实在在存在的啦,根椐上面的中文分得知,那执行例18后就显示为:C盘不存在 通过分析例18,你应该明白if语句中not参数是怎么用了吧!
补充2:IF语句嵌套的写法
我们先来看看 例1
@echo off set a=55
if %a% geq 50 ( if %a% geq 80 ( if %a% geq 100 (
echo a大于等于100 ) else echo a小于100 ) else echo a小于80 ) else echo a小于50 pause
这是一种比较规范的写法,那这种写法是怎样写的呢?那我们一步步的来: 第一步:
if %a% geq 50 ( ) else echo a小于50
第二步:在第一步geq 50 后面的括号()里按两下回车,主要是空两行出来。 if %a% geq 50 (
if %a% geq 80 ( )else echo小于80 ) else echo a小于50
第三步:在第二步geq 80 后面的括号()里按两下回车,主要是空两行出来。 if %a% geq 50 ( if %a% geq 80 (
if %a% geq 100 ( ) else echo a小于100 )else echo小于80 ) else echo a小于50
第四步:在第三步geq 100 后面的括号()里按两下回车,主要是空两行出来。 if %a% geq 50 ( if %a% geq 80 ( if %a% geq 100 (
echo a大于等于100 ) else echo a小于100 )else echo小于80 ) else echo a小于50
上面的代码中,if %a% 和 )else 要适当的缩进,以达到写书清晰!
45.for
在批处理文件中:for %%I in (command1) do command2 in之后必须有空格,否则会出错。
1、for语句的形式变量I,可以换成26个字母中的任意一个,这些字母会区分大小写,也就是说,%%I和%%i会被认为不是同一个变量;形式变量I还可以换成其他的字符,但是,为了不与批处理中的%0~%9这10个形式变量发生冲突,请不要随意把%%I替换为%%0 ~%%9中的任意一个;
2、in和do之间的command1表示的字符串或变量可以是一个,也可以是多个,每一个字符串或变量,我们称之为一个元素,每个元素之间,用空格键、跳格键、逗号、分号或等号分隔;
3、for语句依次提取command1中的每一个元素,把它的值赋予形式变量I,带到do后的command2中参与命令的执行;并且每次只提取一个元素,然后执行一次do后的命令语句,而无论这个元素是否被带到command2中参与了command2的运行;当执行完一次do后的语句之后,再提取command1中的下一个元素,再执行一次command2,如此循环,直到command1中的所有元素都已经被提取完毕,该for语句才宣告执行结束; 例: [code1] @echo off
for %%I in (bbs.bathome.cn) do echo %%I pause
[code2] @echo off
set str=c d e f g h i j k l m n o p q r s t u v w x y z echo 当前硬盘的分区有:
for %%i in (%str%) do if exist %%i: echo %%i: pause
[code3] @echo off
for %%i in (*.txt) do echo \pause
for /f 的基本用法
在for /f语句中,这里的元素是指文件中的每一行,也就是说,for /f 语句是以行为单位处理文本文件的。 [code4] @echo off
for /f %%i in (test.txt) do echo %%i pause