![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-10-02 12:34 |
共 47,813 主题排行 / 349,918 发帖 / 今日 0 篇 / 48,279 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 多个||、&&的执行过程的内在机理是什么? |
| 可打印版本 1,073 / 6 |
| 第1楼 zsc37201 | 发表于 2010-08-02 17:00 |
| 新手上路 发帖 12 积分 12 | |
|
多个||、&&的执行过程的内在机理是什么? ping /n 1 127.1 && echo pass || echo fail
输出结果:pass ping /n 1 0.1 && echo pass || echo fail 输出结果:fail ping /n 1 127.1 || echo fail && echo pass 输出结果:空 ping /n 1 0.1 || echo fail && echo pass 输出结果:fail pass 第二个和第四个不能理解。 第二个ping失败了,为什么还继续向后执行? 第四个ping失败了,为什么还输出pass? 多个||,&&的执行过程的内在机理是什么? |
|
| 第2楼 lovelymorning | 发表于 2010-08-04 00:01 |
| 初级用户 发帖 72 积分 131 | |
|
ping /n 1 127.1 这个,是肯定成功的吧。。。成功就执行 && 命令
ping /n 1 127.1 && echo pass 这两条命令都成功执行,当然不会执行 || echo fail 命令了。。 ping /n 1 0.1 命令失败,自然不会去执行 && echo pass 前面两条都失败了,就执行 || echo fail ping /n 1 127.1 命令成功,自然不会执行 || echo fail 命令不执行,也就不会执行 && echo pass ping /n 1 0.1 命令失败,就执行 || echo fail ,|| echo fail 执行成功也就会执行 && echo pass 其实,理解好 || && 的意思就明白了。。。有时,如果加个 () ,效果,又会不一样。。。 |
|
| 第3楼 zsc37201 | 发表于 2010-08-05 10:27 |
| 新手上路 发帖 12 积分 12 | |
|
谢谢lovelymorning高手的回答,但我还是有点不明白。
我觉得||和&&是根据%errorlevel%来判断的,若当前的errorlevel值为大于等于1则执行||后面的语句,若为0则执行&&后面的语句。 而echo语句是不能改变errorlevel的值的。 可以做个小test。 ping /n 1 0.1 echo %errorlevel% ::为1 echo pass echo %errorlevel% ::依然为1 可见echo即使执行成功后,也还是不能让errorlevel的值变为0. ping /n 1 0.1 || echo fail && echo pass 输出结果:fail pass ping /n 1 0.1 命令失败,就执行 || echo fail ,|| echo fail 执行成功也就会执行 && echo pass ping /n 1 0.1 || echo fail 后echo %errorlevel%后值为1,也就是执行没有成功,为什么依然执行echo pass。 难道|| && 不是按errorlevel来运行的吗? 我仔细看了你的解释,好像是把||或&&和后面的语句当作一个整体,而这个整体没执行,就认为是执行失败,而这个整体执行了,则认为是执行成功。 依您的解释,以上我举出的例子都能解释清楚。 甚至一些长的测试也能通过,比如: ping /n 1 0.1 && echo 1 && echo 2 || echo 3 && echo 4 输出结果:3 4 首先:ping /n 1 0.1 失败,所以不执行&& echo 1 因为不执行&& echo 1,所以&& echo 1失败,所以不执行&& echo 2 ; 因为不执行&& echo 2,所以&& echo 2失败,所以执行|| echo 3; 因为执行|| echo 3,所以||echo 3成功,所以执行&& echo 4 所以输出3 4 但是我又多做了几个test, ping /n 1 0.1 || echo 1 || echo 2 || echo 3 我先分析了一下: 首先:ping /n 1 0.1 失败,所以执行|| echo 1, 因为执行|| echo 1,所以|| echo 1成功,所以不执行 || echo 2; 因为不执行 ||echo 2,所以||echo 2 失败,所以应该执行 || echo 3。 所以结果应该是 1 3,但实际结果是只有1,没有3. 又做了一个复杂的测试: ping /n 1 0.1 && echo 1 && echo 2 || echo 3 && echo 4 || echo 5 && echo 6 || echo 7 经类似的分析结果应该是3 4 7 但实际结果是 3 4 (没有7) 请高手结合我的分析,而试一下,再解释一下,谢谢。 |
|
| 第4楼 lovelymorning | 发表于 2010-08-05 23:42 |
| 初级用户 发帖 72 积分 131 | |
|
ping /n 1 0.1 || echo 1 || echo 2 || echo 3
ping 失败,执行 echo 1,echo1执行成功,所以,echo 2 和后面的,都不会执行了。 echo 3 是在 echo 2 执行失败时才执行 ping /n 1 0.1 && echo 1 && echo 2 || echo 3 && echo 4 || echo 5 && echo 6 || echo 7 ping 失败,那么 echo 1 echo 2 都不执行,执行 echo 3 和 echo 4 ,echo 4成功,所以 echo 5 和之后的,都不会再执行了。。不执行 echo 7 是因为 echo7 是在 echo 6执行失败时才会被执行 这两个,不管 echo 2 或 echo 6 有没有被执行过,就算执行了,这两个命令必然是成功的,所以,|| 就不会被执行 命令成功执行的后面,&& || 和 || && 结果,有时也是很大区别,命令失败时,这两个符号换个位置,也是不一样的。。。。 其实,这么解释,也是不科学的,要准确解释和理解 && || ,要从这两个符号的作用和CMD解释命令时的顺序、处理方式等方面来讲。。很晕的。。。知道大概怎么用就行了。。。 |
|
| 第5楼 zsc37201 | 发表于 2010-08-06 17:21 |
| 新手上路 发帖 12 积分 12 | |
|
谢谢你的回答,这个问题只能这样了,感觉没有什么规律可言,其实正像你说的,有些问题知道大概怎么用就行了,深究下去,没有什么意思,还浪费大脑细胞,给你加分了。
|
|
| 第6楼 wangyang331407 | 发表于 2010-08-06 19:19 |
| 初级用户 发帖 28 积分 28 | |
|
&&
① 连接两个命令,当&&前的命令成功时,才执行&&后的命令。 || ① || 连接符,连接两个命令,当||前的命令失败时,才执行||后的命令。 比如: echo 0123456 | find "789" || echo 字符中没有789 |
|
| 第7楼 haoc | 发表于 2010-08-11 11:38 |
| 新手上路 发帖 8 积分 14 | |
|
非常好
|
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |