Board logo

标题: [文件操作] 批处理命令If的多条件嵌套的用法是怎样的? [打印本页]

作者: yuanyannian    时间: 2012-3-11 20:31     标题: 批处理命令If的多条件嵌套的用法是怎样的?

看到坛友的帖子:
  “被BAT的IF涮了一下,算是搞明白了,来看一下IF的简单形式:
   if 条件1 (执行1) else (执行1反)
    当条件1成立时,执行1,否则执行1反。
   再看一下嵌套用法:
   if 条件1 (if 条件2 (执行2) else (执行2反) 执行1 ) else (执行1反)
    这样理解,当条件1成立时,会进入到条件2的判断当中去,但是无论条件2的执行结果是什么,
   条件1成立总会有执行1。当条件1不成立时,直接执行1反。这里需要注意的就是不要忘记那个"执行1" 的部分,
   如果省略这一部分会导致无法运行
  ---------------------------------------------------------------------------------------------

  对红色部分有些不解,) 后面可以执行某个命令吗?

  试着写了一段代码:3个条件 if 判断,我都头痛了,请老师们给看一下。
  1. @echo off
  2. :abc
  3. cls
  4. echo.
  5. echo “if === 三个条件的嵌套判断”
  6. echo.-----------------------------
  7. echo.
  8. set a=
  9. set b=
  10. set c=
  11. set /p a=a:
  12. set /p b=b:
  13. set /p c=c:
  14. echo.
  15. echo.输出结果
  16. echo.
  17. if "%a%"=="1" (
  18.    if "%b%"=="2" (
  19.       if "%c%"=="3" (
  20.          echo.c=3&echo.b=2&echo.a=1) else (
  21.             echo.c=No&echo.b=2&echo.a=1)) else (
  22.                if "%c%"=="3" (
  23.                   echo.b=No&echo.a=1&echo.c=3) else (
  24.                   echo.b=No&echo.c=No&echo.a=1))) else (
  25.                   if "%d%"=="2" (
  26.                if "%c%"=="3" (echo.a=No&echo.c=3&echo.b=2) else (
  27.             echo.a=No&echo.c=No&echo.b=2)) else (
  28.          if "%c%"=="3" (
  29.       echo.a=No&echo.b=No&echo.c=3) else (
  30.    echo.a=No&echo.b=No&echo.c=No)))
  31. echo.
  32. echo.-----------------------
  33. pause
  34. goto :abc
复制代码

作者: terse    时间: 2012-3-11 23:27

省略 执行1 这一部分 可以运行
现在这样反而无法运行 要么加上连接符 &  要么代码分行
作者: QIAOXINGXING    时间: 2012-3-11 23:44

我是觉得,同一级语句块,有相同的缩进量,楼主的书写格式我是理解不了。
个人觉得这样写就很清楚了:
  1. @echo off
  2. :abc
  3. cls
  4. echo.
  5. echo “if === 三个条件的嵌套判断”
  6. echo.-----------------------------
  7. echo.
  8. set a=
  9. set b=
  10. set c=
  11. set /p a=a:
  12. set /p b=b:
  13. set /p c=c:
  14. echo.
  15. echo.输出结果
  16. echo.
  17. if "%a%"=="1" (
  18.    if "%b%"=="2" (
  19.       if "%c%"=="3" (
  20.          echo.c=3&echo.b=2&echo.a=1
  21.       ) else (
  22.          echo.c=No&echo.b=2&echo.a=1
  23.       )
  24.    ) else (
  25.       if "%c%"=="3" (
  26.          echo.b=No&echo.a=1&echo.c=3
  27.       ) else (
  28.          echo.b=No&echo.c=No&echo.a=1
  29.       )
  30.    )
  31. ) else (
  32.    if "%d%"=="2" (
  33.        if "%c%"=="3" (
  34.           echo.a=No&echo.c=3&echo.b=2
  35.        ) else (
  36.           echo.a=No&echo.c=No&echo.b=2
  37.        )
  38.    ) else (
  39.       if "%c%"=="3" (
  40.           echo.a=No&echo.b=No&echo.c=3
  41.        ) else (
  42.           echo.a=No&echo.b=No&echo.c=No
  43.        )
  44.    )
  45. )
  46. echo.
  47. echo.-----------------------
  48. pause
  49. goto :abc
复制代码

作者: yuanyannian    时间: 2012-3-12 19:52

省略 执行1 这一部分 可以运行
现在这样反而无法运行 要么加上连接符 &  要么代码分行
terse 发表于 2012-3-11 23:27


谢谢!
我的意思主要是想请教关于 IF 嵌套的问题,如下面这句:
  “if 条件1 (if 条件2 (执行2) else (执行2反) 执行1 ) else (执行1反)”
是不是应该这样理解:
    if 条件1 (if 条件2 (执行1+执行2) else (执行1+执行2反) else (执行1反)
那么,如果“条件1”不存在,而条件2存在,应该“执行1反+执行2”;
      如果“条件1”不存在,而条件2也不存在,应该“执行1反+执行2反
  这样的话,“if 条件1 (if 条件2 (执行1+执行2) else (执行1+执行2反) else (执行1反)”
的写法就不是完善的。只判断了条件1存在的情况下,条件2的存在与否,缺少了条件1不存在的情况下,条件2的存在与否。
作者: yuanyannian    时间: 2012-3-12 20:05

我是觉得,同一级语句块,有相同的缩进量,楼主的书写格式我是理解不了。
个人觉得这样写就很清楚了:
QIAOXINGXING 发表于 2012-3-11 23:44


多谢指点!是比我那个清楚多了。
想请教:这样的写法是否合适?
作者: find    时间: 2012-3-12 21:16

回复 4# yuanyannian


那么,如果“条件1”不存在,而条件2存在,应该“执行1反+执行2”

到这一步就错了。
执行2有两个前提,大前提是条件1,小前提是条件2,当大前提不存在的时候,不管小前提否存在,都不应该执行2
作者: yuanyannian    时间: 2012-3-12 21:51

回复  yuanyannian



到这一步就错了。
执行2有两个前提,大前提是条件1,小前提是条件2,当大前提不 ...
find 发表于 2012-3-12 21:16



    谢谢 find,高手现身,有救了。
  “执行2有两个前提,大前提是条件1,小前提是条件2,当大前提不 ...”
这个我能理解,问题是如果条件1和条件2是平行的,如甲和乙:如果甲和乙都在,同时做某事,甲不在,乙来做,乙不在,甲来做,如甲和乙都不在,没人做。这样的情形如何写呢?
作者: find    时间: 2012-3-12 22:09

回复 7# yuanyannian
  1. @echo off
  2. if exist 甲.txt (
  3.     if exist 乙.txt (
  4.         echo 同时做
  5.     ) else (
  6.         echo 甲来做
  7.     )
  8. ) else if exist 乙.txt (
  9.     echo 乙来做
  10. ) else (
  11.     echo 没人做
  12. )
  13. pause
复制代码

作者: yuanyannian    时间: 2012-3-13 13:09

回复  yuanyannian
find 发表于 2012-3-12 22:09



    太合我意了,谢谢 find !!!

  那么,1楼的代码正是此意,不知有无出入?
作者: find    时间: 2012-3-13 18:31

回复 9# yuanyannian


你自己根据4个条件分别测试一下不就知道了?




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