[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
你这个可以和49那个帖合并一起了,都是管道连接符号。
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

回复 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。
      由以上可知,真正的管道符号是|,它真正传输了前一命令的结果到后一命令执行,这样就不必使用临时文件、临时变量了。如果||也算是管道符号,那么&&也应该算是,它们都会将前一命令的执行状态(返回码)传输给后一命令,以此决定后一命令是否执行。实际上在使用中我们都将两者放在同一参考位置上。真正在连接前后命令时没有像前三者一样向后一命令传递信息(执行状态和执行结果)的可能只有&。
      以上说的执行状态,是指命令执行是否成功这一状态信息;执行结果,是指命令执行后获得的结果信息。
      简单滴说:
      &——将两个命令连接起来一起执行,各自独立。
      |——将前面命令执行结果传递给后面命令,血肉相连。传输执行结果。
      &&——如果前面命令执行成功,则执行后面命令,否则不执行。传输执行状态。
      ||——如果前面命令执行失败,则执行后面命令,否则不执行。传输执行状态。
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

返回列表