Board logo

标题: [原创] [批处理命令一日一教学](4)条件判断:if [打印本页]

作者: namejm    时间: 2008-11-14 20:07     标题: [批处理命令一日一教学](4)条件判断:if

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

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

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

  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语句的关系符号见下表:


中文含义

关系符

英文解释

等于

equ

equal

大于

gtr

greater than

大于或等于

geq

greater than or equal

小于

lss

less than

小于或不等于

leq

less than or equal

不等于

neq

no equal


  if语句还有一个精简格式:if 条件表达式 语句,它的含义是:如果条件表达式成立,将执行语句,否则,什么也不做。

多层 if 嵌套的语法举例:
  1. if exist a.txt (
  2.     if exist 1.txt (
  3.         echo 存在 a.txt 和 1.txt
  4.     ) else (
  5.         echo 存在 a.txt 但是不存在 1.txt
  6.     )
  7. ) else if exist b.txt (
  8.     echo 不存在 a.txt 但是存在 b.txt
  9. ) else (
  10.     echo 不存在 a.txt 和 b.txt
  11. )
复制代码

作者: qingfengzhixia    时间: 2008-11-14 20:59

建议楼主在文章的两头添加[code][/code]
作者: lixiaodaoaaa    时间: 2008-11-14 21:27     标题: 写个例子,便于大家理解

  1. @echo off
  2. @mode con cols=40 lines=17
  3. if exist c:\1.txt start cmd.exe&&echo 存在1.txt
  4. echo.&echo.&echo.&echo.
  5. pause
复制代码

作者: Batcher    时间: 2008-11-14 23:41     标题: 回复 2楼 的帖子

加上code以后,虽然便于大家复制,但是不利于排版。
作者: yslyxqysl    时间: 2008-11-15 11:04

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

注意进制。
  1. if 017 equ 15 echo YES
  2. if 0x34 equ 52 echo YES
  3. if 045 equ 0x25 echo YES
  4. pause>nul
复制代码

作者: kennybao    时间: 2008-11-15 12:36

1. else 好像必须和if写在同一行,不然报错,因为CMD把else当作一条命令了。
2. else 后面的代码和( )括号好像都得单独一行
不知道说得对不对。
作者: Batcher    时间: 2008-11-16 12:34     标题: 回复 6楼 的帖子

  1. @echo off
  2. if exist C:\Batcher.txt (
  3.   echo 哈哈
  4. ) else (
  5.   echo 嘿嘿
  6. )
  7. pause
复制代码

作者: nanyi    时间: 2008-12-22 12:31

那个leq的中文含义应该是“小于或等于”吧,LZ貌似写错了。
作者: zjw767676    时间: 2008-12-22 21:27

原帖由 nanyi 于 2008-12-22 12:31 发表
那个leq的中文含义应该是“小于或等于”吧,LZ貌似写错了。

确实是小于或等于
作者: xiong8707    时间: 2008-12-25 20:34     标题: 没看懂 能教一下吗?

比如 我需要判断输入0 1 2 等数值 来决定执行什么命令
那我该怎么写?
作者: xiong8707    时间: 2008-12-25 20:45     标题: 大家别见笑哈,帮我该一下使得此批处理能成功执行

  1. @echo off
  2. set /p s=请输入1 或 2   
  3. echo %s%
  4. if "s"=="1" goto a
  5. if "s"=="2" goto b
  6. :a
  7. echo 你输入的是1
  8. pause
  9. exit
  10. :b
  11. echo 你输入的是2
  12. pause
  13. exit
复制代码

作者: zhaoyajin2000    时间: 2008-12-27 10:54

你的代码可以执行啊 ? 有什么问题吗?
作者: xujin1402008    时间: 2008-12-28 02:01

原帖由 xiong8707 于 2008-12-25 20:45 发表
@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
  1. @echo off
  2. set /p s=请输入1 或 2   
  3. echo %s%
  4. if %s% equ 1 goto a
  5. if %s% equ 2 goto b
  6. :a
  7. echo 你输入的是1
  8. pause
  9. exit
  10. :b
  11. echo 你输入的是2
  12. pause
  13. exit
复制代码

作者: nanoking    时间: 2009-1-5 03:18

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

  1. @echo off
  2. set mode con lines=30
  3. :0
  4. cls
  5. echo.#######################################
  6. echo.投票:
  7. echo. 1、楼主的贴子写得好;
  8. echo. 2、楼主的贴子写得一般般;
  9. echo. 3、楼主的贴子写得不啥的。
  10. echo.#######################################
  11. echo.
  12. set no=:
  13. set /p no= 请选择:
  14. set "no=%no:"=%"
  15. if "%no%"==":" goto 0
  16. if "%no%"=="1" goto 1
  17. if "%no%"=="2" goto 2
  18. if "%no%"=="3" goto 3
  19. if "%no%"=="0" goto 0
  20. goto 0
  21. :1
  22. cls
  23. echo.哈哈,你太英名了!!!
  24. pause>nul
  25. goto 0
  26. :2
  27. cls
  28. echo.哟,你太客气了!!!
  29. pause>nul
  30. goto 0
  31. :3
  32. cls
  33. echo.你眼神不好!!!要不你来写一个更好的!
  34. pause:nul
  35. goto exit
  36. :exit
  37. exit
复制代码

作者: 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楼 的帖子

不知这是什么意思了?一点都看不懂
  1. @echo off
  2. @mode con cols=40 lines=17
  3. if exist c:\1.txt start cmd.exe&&echo 存在1.txt
  4. echo.&echo.&echo.&echo.
  5. pause
复制代码
似乎和前面学的两课挂不上钩,如果楼主能对每一项做一个详解就好了!先谢谢....
例如echo off是什么意思?
         @mode con cols=40 lines=17 又是什么意思?
        如果能用中文解释一下每一行的意思就好
作者: 250CC    时间: 2009-7-16 14:03

写得比较祥细
作者: zysheng110    时间: 2009-7-16 16:16     标题: 前面输入1和2应该加入简易判断!要不输入3就出错!(个人意见)

  1. @echo off
  2. :c
  3. set /p s=请输入1 或 2   
  4. echo 你输入的为%s%
  5. if %s%==1 goto a
  6. if %s%==2 goto b
  7. echo 输入错误,请按要求输入!
  8. pause>nul
  9. cls
  10. goto c
  11. :a
  12. echo 你输入的是1 符合要求
  13. pause
  14. exit
  15. :b
  16. echo 你输入的是2 符合要求
  17. pause
  18. exit
复制代码

作者: benz1979    时间: 2009-7-22 13:53

向高手们学习!努力提高自己!
作者: wkdxz    时间: 2009-8-5 15:20

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

老大,处理下,看不到教程了。。
作者: fyb198351    时间: 2009-8-5 15:56

以前看的时候看不懂。。现在能看懂了
作者: wwenyunkui    时间: 2009-8-5 17:48

有些还是不怎么懂,慢慢学吧
作者: yettybetty    时间: 2009-9-23 10:34

楼主举2个实例啊 感觉这课没怎么懂
作者: zjdhk    时间: 2009-10-9 21:49     标题: 回复 11楼 的帖子

在标号:a之前加一句
echo 输入不正确
pause
exit
应该会比较好
作者: caimingbing    时间: 2010-1-10 11:51

真厉害!佩服中,继续学习中
作者: 咒夜坠    时间: 2010-4-27 10:38     标题: 回复23楼mode

回复23楼mode貌似是显示模式
可以在CMD下间入MODE/?获得帮助
作者: xyqylong    时间: 2010-10-5 23:27     标题: 回复 13楼 的帖子

echo %s%
能说一下这一句有什么实际意义吗?
好好像没什么用处
作者: xyqylong    时间: 2010-10-5 23:32     标题: 回复 7楼 的帖子

7楼的“()”怎么用的,看不太懂,好像不这样用也可以执行,是个人习惯吗,好像减少了代码的可读性
作者: Hello123World    时间: 2011-1-17 07:08     标题: 回复 38楼 的帖子

以前总是说偏移,理解起来有点迟缓,理解为截掉确实更便于运用。
作者: sdvdxl    时间: 2011-3-27 14:40

特殊符号要用^取消其作用,command语句里面包含了<>=等符号,搞了半天也不出,最后终于搞定
作者: xindi10631    时间: 2011-3-29 13:19

怎么没有linux专区呢?
作者: zyc_213    时间: 2011-5-10 15:39

看貼必回。學習中
作者: huomingpang    时间: 2011-5-21 10:03

恩,我是新手,我想知道十四楼的set "no=%no:"=%"
是什么意思,set 后面的是什么意思
作者: hiyaya1212    时间: 2011-5-26 15:52

感觉不是很详细,还是有些不懂呢,到时再来请教- -
作者: baowenjin18    时间: 2011-5-28 22:18

输入1 或 2    a
a
你输入的是1
输入1 或 2
a
你输入的是1
输入1 或 2
a
你输入的是1
输入1 或 2
a
你输入的是1
输入1 或 2    c
c
你输入的是1
输入1 或 2    ed'c
ed'c
你输入的是1
====================================
好吧,一个巨大的BUG
作者: common    时间: 2011-5-29 23:03

13# xujin1402008


请问朋友,为什么换成EQU执行就正确有,==输入2会执行不了呢
作者: 小黑熊    时间: 2011-5-31 09:55

14楼  真有创意  哈哈
作者: q381927439    时间: 2011-6-8 23:20

13# xujin1402008


set /p s
为什么要/P , /P做什么用的?
作者: welllib    时间: 2011-6-16 10:29

用set命令接收到的"输入数字"是什么类型的变量
作者: wpNature    时间: 2011-7-8 09:44

本帖最后由 wpNature 于 2011-7-8 09:46 编辑

The ELSE clause must occur on the same line as the command after the IF.
For example:

IF EXIST filename. (
del filename.
) ELSE (
echo filename. missing.
)

The below example would NOT work because the del command needs to be terminated by a newline:

IF EXIST filename. del filename. ELSE echo filename. missing

Nor would the below example work, since the ELSE command must be on the same line as the end of the IF command:

IF EXIST filename. del filename.
ELSE echo filename. missing

The below example would work if you want it all on one line:


IF EXIST filename. (del filename.) ELSE echo filename. missing


PS:SEE MORE INFORMATION ABOUT ABOVE :http://www.computerhope.com/if.htm
作者: 思念杨杨    时间: 2011-8-1 13:58

less than or equal
这个应该是小于或等于吧?
作者: 思念杨杨    时间: 2011-8-1 13:58

less than or equal
这个应该是小于或等于吧?
作者: zaixinxiangnian    时间: 2011-8-13 15:53

本帖最后由 zaixinxiangnian 于 2011-8-13 22:21 编辑

回复 "10"  
初学者大家见笑了
code:
@echo off
set /p val=请输入值:>nul
if "%val%" equ "0" (echo 你输入了%val%&goto d) else goto abc
:abc
if "%val%" equ "1" (echo 你输入了%val%&goto d) else goto ab
:ab
if "%val%" equ "2" (echo 你输入了%val%&goto d) else goto g
:g
color 16
echo 你的输入错误
:d
pause
作者: wanxibing    时间: 2011-8-19 21:26

回复 11# xiong8707
  1. @echo off
  2. :bigen
  3. cls
  4. set /p s=请输入1 或 2   
  5. if "%s%"=="1" goto a
  6. if "%s%"=="2" goto b
  7. goto err
  8. :err
  9. color 4f
  10. echo.
  11. echo  错误, 你输入的是"%s%"不是数字1或2 请重新输入
  12. pause>nul 2>nul
  13. goto bigen
  14. :a
  15. color 2f
  16. cls
  17. echo 正确!你输入的是%s%=1
  18. pause>nul 2>nul
  19. exit
  20. :b
  21. color 2f
  22. cls
  23. echo 你输入的是%s%=2
  24. pause>nul 2>nul
  25. exit
复制代码

作者: wanxibing    时间: 2011-8-19 21:28

你以前的代码,我要是不输入1或2呢,又是怎么结果
作者: cjiabing    时间: 2011-8-20 00:01

本帖最后由 cjiabing 于 2011-8-20 00:05 编辑

#46、48、49、51楼
语法是规定的东西,没有太多的why,记住就行。
以下是一个常见的if命令的使用方法,可以用来创建菜单,比较大小,判断条件等。
IF命令帮助信息中,比较运算符可以是:
    EQU - 等于,同“==”
    NEQ - 不等于
    LSS - 小于
    LEQ - 小于或等于
    GTR - 大于
    GEQ - 大于或等于

具体使用:
  1. @echo off
  2. :start
  3. echo;
  4. echo;    请分别输入字母  a 和 A
  5. echo;    请分别输入数字 3、10、16
  6. echo;    退出请输入 Q
  7. echo;
  8. set var=
  9. ::清空延迟的变量。
  10. set /p var=  请输入任意字符,比如“A”:
  11. ::“set /p 变量名=提示语”用来与用于交互,给用户输入内容。
  12. if  "%var%"=="" goto start
  13. ::假如没有输入则返回重新输入。
  14. if  /i  %var% equ Q goto end
  15. ::使用goto命令可以跳到其他标签子项中。
  16. if  %var%  equ  a  echo 你输入了小写字母 a
  17. if  %var%  equ  A  echo 你输入了大写字母 A
  18. if  /i  %var%  == a  echo 你输入了字母 a (不分大小写)
  19. if  %var% lss 10 echo 你输入的 %var% 小于 10.
  20. if  %var% geq 10 echo 你输入的 %var% 大于等于 10.
  21. if  %var% lss 20 if %var% gtr 10 echo 你输入的 %var% 介于 20 和 10 之间。
  22. ::可以多个if条件嵌套,用于复杂的判断。
  23. echo 输入结束。
  24. pause
  25. goto start
  26. :end
  27. echo;
  28. echo  你选择了退出。
  29. pause
复制代码

作者: aber02zzl    时间: 2011-9-21 10:26

本帖最后由 aber02zzl 于 2011-9-21 10:32 编辑

这是我自己学习后的一个例子,搞了好久,还有很多不完善的地方,大家勉强看看吧
  1. @echo off
  2. :0
  3. cls
  4. echo #################
  5. echo how are you
  6. echo 1.how are you
  7. echo 2.nice to see you
  8. echo 3.bye
  9. echo #################
  10. echo.
  11. set /p s=choose:
  12. if %s% equ 1 goto a
  13. if %s% equ 2 goto b
  14. if %s% equ 3 goto end
  15. if %s% neq 1 goto 4
  16. if %s% neq 2 goto 4
  17. if %s% neq 3 goto 4
  18. :a
  19. echo how are you
  20. pause >null
  21. goto 0
  22. :b
  23. echo nice to see you
  24. pause>null
  25. goto 0
  26. :4
  27. echo error
  28. pause>null
  29. goto 0
  30. :end
复制代码
发完仔细检查发现这里面有个错误,欢迎大家指正!
作者: aber02zzl    时间: 2011-9-21 10:35

这是我改正后的,应该没有逻辑错误了
  1. @echo off
  2. :0
  3. cls
  4. echo #################
  5. echo how are you
  6. echo 1.how are you
  7. echo 2.nice to see you
  8. echo 3.bye
  9. echo #################
  10. echo.
  11. set /p s=choose:
  12. if %s% equ 1 goto a
  13. if %s% equ 2 goto b
  14. if %s% equ 3 goto end
  15. echo error! input again!
  16. pause>null
  17. cls
  18. goto 0
  19. :a
  20. echo how are you
  21. pause >null
  22. goto 0
  23. :b
  24. echo nice to see you
  25. pause>null
  26. goto 0
  27. :end
复制代码

作者: QIAOXINGXING    时间: 2011-9-30 23:05

学习了。。。。。。。。。。。。
作者: Fantasys    时间: 2011-10-12 17:51

if语句如果有用到括号来括住条件符合时要执行的语句时,它的执行语句前的括号“(”必须与if语句在同一行,而后面的括号")"必须与else在同一行。而且else的执行语句前的括号也要与else在同一行。如:
if a=b (
   echo a
) else (
   echo b
)
或是:
if a=b (echo a) else (echo b)
作者: lazdkiy    时间: 2011-11-7 16:45

if exist 1.txt (echo exsited>1.txt) else (cd.>1.txt)执行两遍,运行结果不一样
作者: xso300    时间: 2011-12-7 00:27

if exist 1.txt (echo exsited>1.txt) else (cd.>1.txt)执行两遍,运行结果不一样
lazdkiy 发表于 2011-11-7 16:45



    楼上误人啊,exsited这个东西我搞了十来分钟,原来就是把这个字符重定向到1.txt文本里面啊!!建议不要用让生手模拟两可的东西啊,这里的exsited让我误解成命令了!!


顺便请教下回答发这个贴子时论坛给出的验证问题是:set /a a=55^<^<5

运行后得到了1760这个结果,还望知道这个结果怎么来的人帮忙解释下,THS!
作者: ghostwar    时间: 2011-12-9 18:30

  1. @echo off
  2. echo.&echo.
  3. set /p str = 请输入密码:
  4. if "str"=="qwer" (echo 密码正确!)else(echo 密码错误!)
  5. pause
复制代码
执行不了,求指教
作者: Null?    时间: 2012-3-22 22:41

回复 63# ghostwar
  1. @echo off
  2. echo.&echo.
  3. set /p str=请输入密码:
  4. if /i "%str%"=="qwer" (echo 密码正确!) else (echo 密码错误!
  5. )
  6. pause>nul
复制代码

作者: Null?    时间: 2012-3-22 22:46

另有一行代码求教,
  1. echo off
  2. for %%i in (79) do echo.
  3. pause
  4. :start
  5. if %%i lss 100 (echo pretty good!&pause>nul) else (echo Ah..!&pause>nul)
  6. if %%i lss 0 (echo Pretty good!&pause>nul) else (echo SHIT!&pause>nul)
  7. goto start
复制代码
输出结果都是Pretty good,怎么回事?
作者: xiaopo    时间: 2012-4-25 22:32

回复 66# Null?


    我感觉应该是for形式变量不能在for语句外引用造成的,你可以在for语句之后echo %%i看看
  改成下面的代码就可以了
  1. echo off
  2. for %%i in (79) do (
  3.   echo.
  4.   set /a num=%%i
  5. )&pause
  6. :start
  7. if %num% lss 100 (echo pretty good!&pause>nul) else (echo Ah..!&pause>nul)
  8. if %num% lss 0 (echo Pretty good!&pause>nul) else (echo SHIT!&pause>nul)
复制代码

作者: baizhongaa    时间: 2012-5-21 17:07

真是好帖。。太喜欢这个每日一学了。。
作者: xingjinda    时间: 2012-5-22 14:57

@echo off


set /p s=请输入1或2:

if /i "%s%"=="2" goto a
if /i "%s%"=="1" goto b
:a
echo 你输入的是2
pause
exit
:b
echo 你输入的是1
pause
exit
作者: wfengye    时间: 2012-5-25 23:57

看不懂哇哇哇哇我
作者: jackmux    时间: 2012-5-28 08:21

慢慢积累,学了就多了 感觉这里人挺互相照顾的
作者: forfiles    时间: 2012-6-28 17:21

回复 72# 奕博


    删除变量内容里面的双引号
作者: zzpsongs    时间: 2012-7-15 20:29

楼上误人啊,exsited这个东西我搞了十来分钟,原来就是把这个字符重定向到1.txt文本里面啊!!建 ...
xso300 发表于 2011-12-7 00:27
  1. set /a a=55^<^<5
复制代码
等价于
  1. set /a a=55"<<"5
复制代码
就是将十进制数55的二进制形式110111左移5位(相当于乘以2的5次方)
结果是二进制数11011100000,转化成十进制就是1760了
作者: cjiabing    时间: 2012-7-19 14:40

回复 62# xso300


if  exist 1.txt  (echo 存在文本 1.txt——此时,如果你想重写1.txt,或把这句话写入该文本就在后面加 >1.txt)  else  echo 如果不存在就创建该文本 >1.txt

不管是否存在1.txt文件都创建时直接用 cd.>1.txt
如果想存在该文本文件时只是想往里写东西,则使用 if exist 判断好点。

  1. if  exist 1.txt (echo 存在文本) else echo 文本不存在&cd.>1.txt
  2. ::执行结果就是,一定存在1.txt。
复制代码

作者: linzhichu11    时间: 2012-11-7 08:13

回复 14# nanoking


    set "no=%no:"=%"  请教一下这个是什么意思?谢谢了!
作者: BAT-VBS    时间: 2012-11-7 08:32

回复 76# linzhichu11


    删掉双引号
作者: linzhichu11    时间: 2012-11-7 12:37

回复 77# BAT-VBS


    谢啦!
作者: ladesiji    时间: 2012-11-15 09:12

回复 5# yslyxqysl


    关于进制的,还是不理解,我自己观察了你的示例,按照数量关系来说:第一组  第一个数字是8进制,后面是10进制。第二组第一个是16进制,后面是10进制。第三组第一个数字为8进制,后面的为16进制。
是不是想告诉我们:16进制数 必须是0X00格式  8进制 开头必须有 0  而10进制数没有别的限制可以直接表示?
作者: victoriacc    时间: 2013-2-18 11:36

学习了,很好。。。
作者: xuliang331221    时间: 2013-3-6 15:38

  1. @echo off
  2. set /p s=请输入1 或 2   
  3. echo %s%
  4. if "s"=="1" goto a
  5. if "s"=="2" goto b
  6. :a
  7. echo 你输入的是1
  8. pause
  9. exit
  10. :b
  11. echo 你输入的是2
  12. pause
  13. exit
复制代码

作者: 岁寒叁友    时间: 2013-5-9 09:19

  1. echo off
  2. :q
  3. echo 请输入1或2或3
  4. set /p s=
  5. @echo %s%
  6. if %s% lss 1 (
  7. echo 你输入有误
  8. goto q
  9. )
  10. if %s% gtr 3 (
  11. echo 你输入有误
  12. goto q
  13. )
  14. if %s% equ 1 (
  15. echo 你输入的是1
  16. pause
  17. exit
  18. )
  19. if %s% equ 2 (
  20. echo 你输入的是2
  21. pause
  22. exit
  23. )
  24. if %s% equ 3 (
  25. echo 你输入的是3
  26. pause
  27. exit
  28. )
复制代码

作者: 岁寒叁友    时间: 2013-5-9 09:42

  1. @echo off
  2. :q
  3. echo 请输入1或 2或 3
  4. set /p s=
  5. echo %s%
  6. if %s% lss 1 goto a
  7. if %s% gtr 3 goto a
  8. if %s% equ 1 goto b
  9. if %s% equ 2 goto c
  10. if %s% equ 3 goto d
  11. :a
  12. echo 你输入有误 请重新输入
  13. pause
  14. goto q
  15. :b
  16. echo 你输入的是一
  17. pause
  18. exit
  19. :c
  20. echo 你输入的是二
  21. pause
  22. exit
  23. :d
  24. echo 你输入的是三
  25. pause
  26. exit
复制代码

作者: an410398183    时间: 2013-5-9 13:55

楼主贴子很不错.
作者: system_fans    时间: 2013-7-26 16:10

这个帖子写的真不错,哈哈
作者: changedirectory    时间: 2013-9-8 16:52

回复 14# nanoking


    能解释下,有点看不懂!
作者: changedirectory    时间: 2013-9-8 17:57

新手写一个。
  1. @echo off
  2. if exist bat rd /s /q bat
  3. pause
复制代码

作者: chuyizhou    时间: 2014-1-9 13:46

正好学习batch的第二天。非常非常有用。非常感谢搂住的一日一教程!
作者: 740511    时间: 2014-4-14 15:29

太复杂了,看着实在费劲
作者: zh_1452    时间: 2014-4-26 02:11

echo off
start dir c:\windows\system32\*.ini
if exist c:\windows\system32\*.ini看看系统下面有没有后名为ini的文件
if "win"=="sys" win字符串等于不sys字符串
if 27 equ 39显示27等于39 还是27等于39
就这三个变量不会
作者: cjiabing    时间: 2014-4-26 08:00

回复 90# zh_1452


    哥,学点基础知识啊!~
start dir c:\windows\system32\*.ini——start dir这是什么意思呢?
if exist c:\windows\system32\*.ini——if exist  不能使用通配符
……
作者: zhangwen716053    时间: 2014-5-18 20:46

回复 1# namejm


    1、判断驱动器、文件、文件夹是否存在。     if exist i: (echo i盘存在) else (echo i盘不存在)
    2、判断字符串是否相等。是否区分大小写,参数/i         例:    if /i "Abc"=="abc" (echo "Abc"="abc",不区分大小写) else (echo dfasasdfasfd)
    3、判断数值是否相等。
作者: zhangwen716053    时间: 2014-5-18 20:50

回复 1# namejm


     1、判断驱动器、文件、文件夹是否存在。     if exist i: (echo i盘存在) else (echo i盘不存在)
    2、判断字符串是否相等。是否区分大小写,参数/i         例:    if /i "Abc"=="abc" (echo "Abc"="abc",不区分大小写) else (echo dfasasdfasfd)
    3、判断数值是否相等。                                            例:    if 1 equ 2 (echo 1dengyu 2) else (echo wohaogangxing)
                                                                                         不等于
作者: zhangwen716053    时间: 2014-5-18 20:53

回复 1# namejm


     1、判断驱动器、文件、文件夹是否存在。     if exist i: (echo i盘存在) else (echo i盘不存在)
    2、判断字符串是否相等。是否区分大小写,参数/i         例:    if /i "Abc"=="abc" (echo "Abc"="abc",不区分大小写) else (echo dfasasdfasfd)
    3、判断数值是否相等。                                            例:    if 1 equ 2 (echo 1dengyu 2) else (echo wohaogangxing)
                                                                                         不等于 neq     大于
作者: daxin2014    时间: 2014-7-10 10:45

字符相等用== 不想等呢,是用!=吗?我试了下,貌似不行
作者: Batcher    时间: 2014-7-10 12:48

回复 95# daxin2014


    EQU - 等于
    NEQ - 不等于
    LSS - 小于
    LEQ - 小于或等于
    GTR - 大于
    GEQ - 大于或等于
作者: zh_1452    时间: 2014-7-10 19:18

本帖最后由 zh_1452 于 2014-7-10 20:07 编辑

回复 91# cjiabing
  1. @echo off
  2. if exist e:\test.txt (echo e盘下有test.txt存在) else (type nul>e:\test.txt)
  3. if "abc"=="xyz" (echo 字符串abc等于字符串xyz) else (find "abc" "e:\test.txt")
  4. if 37 equ 63 (echo 37等于63) else (echo 37等于37)
  5. set str=37
  6. if defined str (echo 变量str已经被赋值,其值为%str%) else (echo 变量str的值为空)
  7. pause
复制代码
[attach]7433[/attach]
  1. @echo off
  2. echo 一直在学习呀,就没停过,偶尔休息一下,也是因为夏天的缘故......
  3. pause
复制代码

作者: zh_1452    时间: 2014-7-27 09:57

本帖最后由 zh_1452 于 2014-7-27 10:09 编辑
  1. @echo off
  2. :: 批处理安装snagitv10.0
  3. if exist  E:\SnagIt 7\Snagit\快速安装.exe (echo E:\SnagIt 7\Snagit快速安装.exe存在) else (
  4. (
  5.      start /wait "" "E:\SnagIt 7\Snagit\快速安装.exe" /verysilent sp-
  6. )
  7. )
  8.      echo.  
  9.       pause
复制代码
  1. @echo off
  2. ::批处理安装dev-c++ 4.9.9.2
  3. if exist C:\Documents and Settings\Administrator\桌面\devc_13036\devcpp.exe (echo C:\Documents and Settings\Administrator\桌面\devc_13036\devcpp.exe) else (
  4. (
  5. start /wait "" "C:\Documents and Settings\Administrator\桌面\devc_13036\devcpp.exe" /verysilent sp-
  6. )
  7. )
  8. echo.
  9. pause
复制代码

作者: zh_1452    时间: 2014-8-14 00:30

  1. @echo off
  2. echo ==============================
  3. echo.批处理安装三国志9单机版
  4. echo ==============================
  5. if exist e:\三国志9繁体中文硬盘版 (attrib e:\三国志9繁体中文硬盘版) else (
  6. (
  7. start /wait "" "e:\三国志9繁体中文硬盘版.exe" /verysilent sp-
  8. )
  9. )
  10. echo ==============================
  11. echo.安装成功请退出!
  12. echo ==============================
  13. pause
复制代码

作者: 缓慢的死亡    时间: 2014-9-4 18:25

学习了,感谢楼主~
作者: Nemo_zg    时间: 2014-10-17 15:39

回复 43# huomingpang


    把变量no中的"去掉。
作者: 慕夜蓝化    时间: 2014-12-2 17:08

回复 7# Batcher


    说实话,不明白你们为什么要这样写批处理,在我看来,批处理的命令多是由行来构成的,理解起来也比较方便。然而许多人这样子一条命令分成多行来写,看上去像是在做什么了不起的事情一样,写出来的命令一大串,许多时候让人一头雾水。。。然后在一点一点的理解,组合,真是的!
作者: Batcher    时间: 2014-12-2 17:20

回复 102# 慕夜蓝化


从语法上来说,不是必须写成那个样子。
微软是推荐写成那个样子的。
在程序员这个圈子里面,大多数人是倾向于写成那个样子的。

作为代码,第一重要的是正确性,能实现功能就好。人生苦短,自己怎么高兴就怎么写,不一定非要按照别人推荐的格式写代码。
作者: hero1997    时间: 2014-12-23 10:59

分开学感觉还好,难度在于以后的综合使用。
作者: cjiabing    时间: 2014-12-23 21:35

回复 102# 慕夜蓝化


    格式这东西,不同的人写出来有不同的结果:
一本正经、规规矩矩的写,人家可能会说这家伙呆头呆脑的,罗里吧嗦,也可能会说这人学养深厚,大师风范。
不按常规、眼花缭乱的写,人家可能会说这家伙神嗨戚戚的,乱七八糟,也可能会说这人鬼斧神工,高手一绝。
    看你怎么追求了




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2