批处理之家's Archiver

namejm 发表于 2008-11-14 20:07

[批处理命令一日一教学](4)条件判断:if

[一日一教学]批处理系列帖子索引 [url]http://www.bathome.net/thread-2576-1-1.html[/url]

标题:一日一教学系列4_条件判断:if
首发地址:[url]http://bbs.bathome.net/thread-2530-1-1.html[/url]
发表日期:2008.11.14
更新日期:无

上一篇:内容重定向:>和>> [url]http://bbs.bathome.net/thread-2516-1-1.html[/url]
下一篇:流程跳转:goto [url]http://bbs.bathome.net/thread-2574-1-1.html[/url]

  if用于条件判断,适用于以下情形:

  1、判断驱动器、文件或文件夹是否存在,用 if exist 语句;
  2、判断某两个字符串是否相等,用 if "字符串1"=="字符串2" 语句;
  3、判断某两个数值是否相等,用 if 数值1 equ 数值2 语句;
  4、判断某个变量是否已经被赋值,用 if defined str 语句;

  if语句的完整格式是这样的:if 条件表达式 (语句1) else (语句2),它的含义是:如果条件表达式成立,那么,就执行语句1,否则,将执行语句2。

  对于以上四种情形,可以分别使用如下代码:

  1、if exist d:\test.txt (echo D盘下有test.txt存在) else (echo D盘下不存在test.txt)
  2、if "abc"=="xyz" (echo 字符串abc等于字符串xyz) else (echo 字符串abc不等于字符串xyz)
  3、if 1 equ 2 (echo 1等于2) else (echo 1不等于2)
  4、if defined str (echo 变量str已经被赋值,其值为%str%) else (echo 变量str的值为空)

  判断字符串是否相等的时候,if会区分大小写,比如,单纯的if语句会认为字符串abc和字符串Abc不相同,若不想区分大小写,则需要添加 /i 开关,使用 if /i "字符串1"=="字符串2" 的格式;另外,等于符号是连续的"=="而非单独的"="。

  判断两个数值之间的大小关系,除了等于用equ之外,还有其他的关系符号,所有适用于if语句的关系符号见下表:


[table=50%][tr][td][align=center][b]中文含义 [/b][/align][/td][td][align=center][b]关系符[/b][/align][/td][td][align=center][b]英文解释[/b][/align][/td][/tr][tr][td][align=center]等于[/align][/td][td][align=center]equ[/align][/td][td][align=center]equal[/align][/td][/tr][tr][td][align=center]大于[/align][/td][td][align=center]gtr[/align][/td][td][align=center]greater than[/align][/td][/tr][tr][td][align=center]大于或等于[/align][/td][td][align=center]geq[/align][/td][td][align=center]greater than or equal[/align][/td][/tr][tr][td][align=center]小于[/align][/td][td][align=center]lss[/align][/td][td][align=center]less than[/align][/td][/tr][tr][td][align=center]小于或不等于[/align][/td][td][align=center]leq[/align][/td][td][align=center]less than or equal[/align][/td][/tr][tr][td][align=center]不等于[/align][/td][td][align=center]neq[/align][/td][td][align=center]no equal[/align][/td][/tr][/table]
  if语句还有一个精简格式:if 条件表达式 语句,它的含义是:如果条件表达式成立,将执行语句,否则,什么也不做。

多层 if 嵌套的语法举例:[code]if exist a.txt (
    if exist 1.txt (
        echo 存在 a.txt 和 1.txt
    ) else (
        echo 存在 a.txt 但是不存在 1.txt
    )
) else if exist b.txt (
    echo 不存在 a.txt 但是存在 b.txt
) else (
    echo 不存在 a.txt 和 b.txt
)[/code]

qingfengzhixia 发表于 2008-11-14 20:59

建议楼主在文章的两头添加[code][/code]

lixiaodaoaaa 发表于 2008-11-14 21:27

写个例子,便于大家理解

[code]@echo off
@mode con cols=40 lines=17
if exist c:\1.txt start cmd.exe&&echo 存在1.txt
echo.&echo.&echo.&echo.
pause[/code]

Batcher 发表于 2008-11-14 23:41

回复 2楼 的帖子

加上code以后,虽然便于大家复制,但是不利于排版。

yslyxqysl 发表于 2008-11-15 11:04

[quote]判断某两个数值是否相等,用 if 数值1 equ 数值2 语句;[/quote]
注意进制。[code]if 017 equ 15 echo YES
if 0x34 equ 52 echo YES
if 045 equ 0x25 echo YES
pause>nul[/code]

kennybao 发表于 2008-11-15 12:36

1. else 好像必须和if写在同一行,不然报错,因为CMD把else当作一条命令了。
2. else 后面的代码和( )括号好像都得单独一行
不知道说得对不对。

Batcher 发表于 2008-11-16 12:34

回复 6楼 的帖子

[code]@echo off
if exist C:\Batcher.txt (
  echo 哈哈
) else (
  echo 嘿嘿
)
pause[/code]

nanyi 发表于 2008-12-22 12:31

那个leq的中文含义应该是“小于或等于”吧,LZ貌似写错了。

zjw767676 发表于 2008-12-22 21:27

[quote]原帖由 [i]nanyi[/i] 于 2008-12-22 12:31 发表 [url=http://bbs.bathome.net/redirect.php?goto=findpost&pid=17616&ptid=2530][img]http://bbs.bathome.net/images/common/back.gif[/img][/url]
那个leq的中文含义应该是“小于或等于”吧,LZ貌似写错了。 [/quote]
确实是小于或等于

xiong8707 发表于 2008-12-25 20:34

没看懂 能教一下吗?

比如 我需要判断输入0 1 2 等数值 来决定执行什么命令
那我该怎么写?

xiong8707 发表于 2008-12-25 20:45

大家别见笑哈,帮我该一下使得此批处理能成功执行

[code]@echo off
set /p s=请输入1 或 2   
echo %s%
if "s"=="1" goto a
if "s"=="2" goto b
:a
echo 你输入的是1
pause
exit

:b
echo 你输入的是2
pause
exit[/code]

zhaoyajin2000 发表于 2008-12-27 10:54

你的代码可以执行啊 ? 有什么问题吗?

xujin1402008 发表于 2008-12-28 02:01

[quote]原帖由 [i]xiong8707[/i] 于 2008-12-25 20:45 发表 [url=http://bbs.bathome.net/redirect.php?goto=findpost&pid=17804&ptid=2530][img]http://bbs.bathome.net/images/common/back.gif[/img][/url]
@echo off
set /p s=请输入1 或 2   
echo %s%
if "s"=="1" goto a
if "s"=="2" goto b
:a
echo 你输入的是1
pause
exit

:b
echo 你输入的是2
pause
exit [/quote][code]@echo off
set /p s=请输入1 或 2   
echo %s%
if %s% equ 1 goto a
if %s% equ 2 goto b
:a
echo 你输入的是1
pause
exit

:b
echo 你输入的是2
pause
exit[/code]

nanoking 发表于 2009-1-5 03:18

我也来一个,哈哈…………

[code]@echo off
set mode con lines=30
:0
cls
echo.#######################################
echo.投票:
echo. 1、楼主的贴子写得好;
echo. 2、楼主的贴子写得一般般;
echo. 3、楼主的贴子写得不啥的。
echo.#######################################
echo.
set no=:
set /p no= 请选择:
set "no=%no:"=%"
if "%no%"==":" goto 0
if "%no%"=="1" goto 1
if "%no%"=="2" goto 2
if "%no%"=="3" goto 3
if "%no%"=="0" goto 0
goto 0

:1
cls
echo.哈哈,你太英名了!!!
pause>nul
goto 0

:2
cls
echo.哟,你太客气了!!!
pause>nul
goto 0

:3
cls
echo.你眼神不好!!!要不你来写一个更好的!
pause:nul
goto exit

:exit
exit[/code]

whedu 发表于 2009-2-24 09:22

都是高手,看着挺费劲!

fsh6666 发表于 2009-3-9 15:01

不错   分享了  谢谢了

sabor 发表于 2009-3-9 16:19

顶一个~

支持...
我顶..

5810239q 发表于 2009-4-2 22:45

楼主的贴子写得好

computerarts 发表于 2009-4-8 15:46

呵呵,有点晕。看来不能急进,要一点点学。

8582565 发表于 2009-4-9 14:08

@echo off
菜鸟,完全看不懂啊······

xiaoxin 发表于 2009-4-11 16:13

在网上搜的资料不怎么好,今天看到楼主的教程  ,呵呵  一看就懂  ,对我们新手来说这样的教程是最好的。

zouweiproe 发表于 2009-4-17 14:41

这一篇看不懂了,不知楼主有什么高招让我们这些菜鸟能消化这一课...

zouweiproe 发表于 2009-4-17 14:48

回复 3楼 的帖子

不知这是什么意思了?一点都看不懂[code]@echo off
@mode con cols=40 lines=17
if exist c:\1.txt start cmd.exe&&echo 存在1.txt
echo.&echo.&echo.&echo.
pause[/code]似乎和前面学的两课挂不上钩,如果楼主能对每一项做一个详解就好了!先谢谢....
例如:@echo off是什么意思?
         @mode con cols=40 lines=17 又是什么意思?
        如果能用中文解释一下每一行的意思就好

250CC 发表于 2009-7-16 14:03

写得比较祥细

zysheng110 发表于 2009-7-16 16:16

前面输入1和2应该加入简易判断!要不输入3就出错!(个人意见)

[code]@echo off
:c
set /p s=请输入1 或 2   
echo 你输入的为%s%
if %s%==1 goto a
if %s%==2 goto b
echo 输入错误,请按要求输入!
pause>nul
cls
goto c
:a
echo 你输入的是1 符合要求
pause
exit
:b
echo 你输入的是2 符合要求
pause
exit[/code]

benz1979 发表于 2009-7-22 13:53

向高手们学习!努力提高自己!

wkdxz 发表于 2009-8-5 15:20

流程跳转:goto [url]http://bbs.bathome.net/topicadmin.php?tid=2574[/url]
批处理之家 提示信息
对不起,您没有权限使用管理功能。

老大,处理下,看不到教程了。。

fyb198351 发表于 2009-8-5 15:56

以前看的时候看不懂。。现在能看懂了

wwenyunkui 发表于 2009-8-5 17:48

有些还是不怎么懂,慢慢学吧

yettybetty 发表于 2009-9-23 10:34

楼主举2个实例啊 感觉这课没怎么懂

页: [1] 2 3 4

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.