|
|
发表于 2012-2-12 21:02:20
|
显示全部楼层
回复 11# Batcher
不会是我误导的吧?最近状态不好,表达不严谨,老说错话做错事。
其实我的意思是管道符和连接符,换个角度说,&、&&、|、||这些符号都有一个共同的特性,就是它们都能将两个命令连接起来,或表示并联,或表示串联:
& 连接符号,表示连接两个命令,此两个命令之间缺乏必要的关联,前后两个命令可以各独立成行;命令按横向顺序执行。如:@echo off&echo Yes&pause&exit,这样做的意义就是在FOR等命令当中能够实现用一行来执行多行的命令。
&& 表示连接两个命令,此两个命令之间存在先后顺序,即前一个命令执行成功后再执行后一个命令,没有前一命令执行结果(成功与否)反馈后一个命令就无法执行;命令不能分开执行,否则达不到原有功能和目的。打个比方,如果你点燃导火线(前一命令),鞭炮就会响(后一命令),而只要你点燃它肯定会响。&&的判断标准应该是类似于返回码之类的方式,也就是,你可以将&&语句改成:echo Yes&IF %ERRORLEVEL% == 0 echo 执行成功&pause。但我对返回码认识比较迷糊,可能只要命令执行了而不管有无结果返回码都算是0,似乎没有&&那么精确和方便。
| 传说中的管道符号,表示连接两个命令,并将前一个命令执行结果传输给后一个命令,理论上类似于单个FOR的执行过程;这两个命令存在先后关系,可以同时运行,但没有前一命令的结果后一命令就会发生错误。管道符|类似于接力赛上的接力棒,它从一个运动员的手上传递给下一个运动员的手上。如:dir|find /i "dir"
|| 仍然是管道符,表示连接两个命令,它将上一命令结果传输给下一命令执行,但它传输的是一种执行状态(成功与否),而不是或不仅仅是执行结果;性质上几乎与&&一模一样,只是功能上恰好相反,它表示上一命令执行失败后执行后一命令,如果不失败则不执行。如:echooo ooo||echo Bad。 或:echo ooo>nul 2>nul||echo Bad。
由以上可知,真正的管道符号是|,它真正传输了前一命令的结果到后一命令执行,这样就不必使用临时文件、临时变量了。如果||也算是管道符号,那么&&也应该算是,它们都会将前一命令的执行状态(返回码)传输给后一命令,以此决定后一命令是否执行。实际上在使用中我们都将两者放在同一参考位置上。真正在连接前后命令时没有像前三者一样向后一命令传递信息(执行状态和执行结果)的可能只有&。
以上说的执行状态,是指命令执行是否成功这一状态信息;执行结果,是指命令执行后获得的结果信息。
简单滴说:
&——将两个命令连接起来一起执行,各自独立。
|——将前面命令执行结果传递给后面命令,血肉相连。传输执行结果。
&&——如果前面命令执行成功,则执行后面命令,否则不执行。传输执行状态。
||——如果前面命令执行失败,则执行后面命令,否则不执行。传输执行状态。 |
|