[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[原创] [批处理命令一日一教学](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. )
复制代码
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

谢谢楼主,学习了!
本人已死,不用联系,要联系下来联系~

TOP

刚学搞得一个功能, 计算文件名长度后, 重命名文件
  1. :bigen
  2. cls
  3. set /p a=inputLOT ID:
  4. for /l %%a in (0,1,9999) do (
  5.     set /a b+=1
  6.     if not "!a:~%%a,1!"=="" (
  7.         set c=!b!
  8.     )
  9. )
  10. set /p=%c%
  11. if %c% equ 9 goto a
  12. if %c% equ 10 goto b
  13. goto error
  14. :error
  15. color 4f
  16. echo.
  17. echo  错误,输入批号有误请重新输入
  18. pause>nul 2>nul
  19. goto bigen
  20. :a
  21. @echo off
  22. setlocal enabledelayedexpansion
  23. set s=map
  24. for /f "tokens=* delims=" %%i in ('dir /b /a-d *.txt') do (
  25. set "line=%%i"
  26. echo "%%i" | findstr %s% && ren "%%i" "!line:~0,12!_CP map.txt" || ren "%%i" "!line:~0,12!_Counter.txt"
  27. )
  28. for /f "tokens=* delims=" %%i in ('dir /b /a-d *.plf') do (
  29. set "line=%%i"
  30. ren "%%i" "!line:~0,12!.plf"
  31. )
  32. for /f "tokens=* delims=" %%i in ('dir /b /a-d *.xls') do (
  33. set "line=%%i"
  34. echo "%%i" | findstr %s% && del /s /q /f *map.xls|| ren "%%i" "!line:~0,12!.xls"
  35. )
  36. pause>nul 2>nul
  37. exit
  38. :b
  39. color 2f
  40. cls
  41. @echo off
  42. setlocal enabledelayedexpansion
  43. set s=map
  44. for /f "tokens=* delims=" %%i in ('dir /b /a-d *.txt') do (
  45. set "line=%%i"
  46. echo "%%i" | findstr %s% && ren "%%i" "!line:~0,13!_CP map.txt" || ren "%%i" "!line:~0,13!_Counter.txt"
  47. )
  48. for /f "tokens=* delims=" %%i in ('dir /b /a-d *.plf') do (
  49. set "line=%%i"
  50. ren "%%i" "!line:~0,13!.plf"
  51. )
  52. for /f "tokens=* delims=" %%i in ('dir /b /a-d *.xls') do (
  53. set "line=%%i"
  54. echo "%%i" | findstr %s% && del /s /q /f *map.xls|| ren "%%i" "!line:~0,13!.xls"
  55. )
  56. pause>nul 2>nul
  57. exit
复制代码

TOP

if not exist x (md x)
如果不存在x 创建一个名为x的文件夹

TOP

回复 14# nanoking


    set "no=%no:"=%"

这一句什么意思?

TOP

回复 14# nanoking


    set no=:
这个设置是什么意思啊?

TOP

回复 10# xiong8707
  1. @echo off
  2. @set /p input=0,1,2
  3. if "%input%"=="0" goto A
  4. if "%input%"=="1" goto B
  5. if "%input%"=="2" goto C
  6. pause>nul
  7. exit
  8. :A
  9. md test1
  10. pause
  11. exit
  12. :B
  13. md test2
  14. pause
  15. exit
  16. :C
  17. md test3
  18. pause
  19. exit
复制代码
输入0,1,2 分别创建文件夹test1,test2,test3

TOP

第四课结束,继续感谢大佬

TOP

回复 1# namejm


    还不错 感觉太浅显了一点

TOP

回复 9# zjw767676


    错了,应该修改一下吧。

TOP

@echo off
if exist a.bat (echo yeah!)  else (echo wooooooooow!)
pause>nul

TOP

大家都棒棒哒

TOP

回复 105# cjiabing


    恩,其实在学了for以后,也逐渐的适应了这种写法,现在觉得以前那种一条一条写出来的命令比较生硬。我想我应该是比较喜欢第二种写法的,谢谢指点。
踏实一些点.不要着急.你想要的时间都会给你.2

TOP

回复 102# 慕夜蓝化


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

TOP

分开学感觉还好,难度在于以后的综合使用。

TOP

返回列表