标题: [文件操作] 批处理命令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 判断,我都头痛了,请老师们给看一下。- @echo off
-
- :abc
- cls
- echo.
- echo “if === 三个条件的嵌套判断”
- echo.-----------------------------
- echo.
- set a=
- set b=
- set c=
- set /p a=a:
- set /p b=b:
- set /p c=c:
- echo.
- echo.输出结果
- echo.
- if "%a%"=="1" (
- if "%b%"=="2" (
- if "%c%"=="3" (
- echo.c=3&echo.b=2&echo.a=1) else (
- echo.c=No&echo.b=2&echo.a=1)) else (
- if "%c%"=="3" (
- echo.b=No&echo.a=1&echo.c=3) else (
- echo.b=No&echo.c=No&echo.a=1))) else (
- if "%d%"=="2" (
- if "%c%"=="3" (echo.a=No&echo.c=3&echo.b=2) else (
- echo.a=No&echo.c=No&echo.b=2)) else (
- if "%c%"=="3" (
- echo.a=No&echo.b=No&echo.c=3) else (
- echo.a=No&echo.b=No&echo.c=No)))
-
- echo.
- echo.-----------------------
- pause
- goto :abc
复制代码
作者: terse 时间: 2012-3-11 23:27
省略 执行1 这一部分 可以运行
现在这样反而无法运行 要么加上连接符 & 要么代码分行
作者: QIAOXINGXING 时间: 2012-3-11 23:44
我是觉得,同一级语句块,有相同的缩进量,楼主的书写格式我是理解不了。
个人觉得这样写就很清楚了:- @echo off
-
- :abc
- cls
- echo.
- echo “if === 三个条件的嵌套判断”
- echo.-----------------------------
- echo.
- set a=
- set b=
- set c=
- set /p a=a:
- set /p b=b:
- set /p c=c:
- echo.
- echo.输出结果
- echo.
- if "%a%"=="1" (
- if "%b%"=="2" (
- if "%c%"=="3" (
- echo.c=3&echo.b=2&echo.a=1
- ) else (
- echo.c=No&echo.b=2&echo.a=1
- )
- ) else (
- if "%c%"=="3" (
- echo.b=No&echo.a=1&echo.c=3
- ) else (
- echo.b=No&echo.c=No&echo.a=1
- )
- )
- ) else (
- if "%d%"=="2" (
- if "%c%"=="3" (
- echo.a=No&echo.c=3&echo.b=2
- ) else (
- echo.a=No&echo.c=No&echo.b=2
- )
- ) else (
- if "%c%"=="3" (
- echo.a=No&echo.b=No&echo.c=3
- ) else (
- echo.a=No&echo.b=No&echo.c=No
- )
- )
- )
-
- echo.
- echo.-----------------------
- pause
- 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 - @echo off
- if exist 甲.txt (
- if exist 乙.txt (
- echo 同时做
- ) else (
- echo 甲来做
- )
- ) else if exist 乙.txt (
- echo 乙来做
- ) else (
- echo 没人做
- )
- 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 |