谢谢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)
请高手结合我的分析,而试一下,再解释一下,谢谢。