|
(1)&
如echo Checking what executable files we have in WINDOWS... & dir C:\WINDOWS\*.exe & echo And we got lots of stuff here.
&在多个命令之间所起的连接作用是将这三者分成3行来独立执行,因为它们之间是相互独立的关系。不论三者中每一条命令的执行结果如何,后面的一条命令总能被得到执行(这与&&和||不同)。
(2)&&
&&作为组合命令之一,与&类似,也有着并列多条命令并将其按顺序执行的功能。
与&的不同之处是,如果多命令中的某一条命令执行出错时,后面的所有命令将不会再被执行;如果一直没有出错则会一直执行完所有的并列命令。
如下面的例子
echo Checking if we have the following directory... & dir "E:\starcraft II" & echo Seems it does not exist.
echo Checking if we have the following directory... && dir "E:\starcraft II" && echo Seems it does not exist.
它们的区别是,前者会有 Seems its not exist. 的输出,而后者却没有。
(3)||
||的用途与&&的功能恰好相反。当遇到执行正确的命令后将不再执行后面的命令,如果没有出现正确的命令则一直执行完所有命令。例如 dir D:\test || md D:\test ,如果 D:\test 存在,即第一条命令执行正确的话,后面的创建 D:\test 就不会再执行了;相反,如果第一条命令执行出错,那么后面的命令就起作用了。
在混合使用的时候需要注意它们的优先级。分析下面几个例子有助于我们理解它们的执行效果(如果我们的机器上并没有 Z:盘的话)。
dir Z: & dir C: || echo Howdy ( echo Howdy不执行)
dir C: & dir Z: || echo Howdy (都执行)
dir Z: && dir C: || echo Howdy (dir C: 不执行)
dir C: && dir Z: || echo Howdy(都执行)
dir C: && dir C: || echo Howdy( echo Howdy不执行)
dir C: || echo Howdy & echo Hi there ( echo Howdy不执行)
dir C: || echo Howdy && echo Hi there ( echo Howdy和echo Hi there 不执行)
dir Z: || echo Howdy & echo Hi there(都执行)
dir Z: || echo Howdy && echo Hi there(都执行)
优先级验证实例
- @echo off
- echo.
- echo. 已经确认命令连接符号优先级从低到高如下:
- echo. ^& 命令分隔符
- echo. ^|^| 逻辑或操作符
- echo. ^&^& 逻辑与操作符
- echo. ^| 管道操作符
- echo. ^< ^> ^>^> I/O重定向操作符
- echo. ^(^) 命令分组
- echo.
- echo.证明过程如下:
- pause
- echo.
- echo. 首先应当公认^(和^)作为命令分组符号有最高的优先级,可以改变任意命令组的优先级
- echo.
- echo. 另外需要注意的是,命令连接符号的优先级与语句的执行顺序不是直接对应的
- echo.
- echo. 命令行中的语句仍然是先执行左侧,再执行右侧
- echo.
- echo. 命令连接符只影响左侧与右侧语句的分组过程,而不会使右侧语句先执行
- echo.
- pause
- cls
- echo on
- echo flag1 | echo flag2 > con
- echo flag1 | (echo flag2 > con)
- (echo flag1 | echo flag2) > con
- @echo off
- echo.
- echo.前两句输出效果相同,说明第二句的分组符号可以省略,证明 ^> 优先级大于 ^|
- pause
- cls
- echo on
- echo flag1 && echo flag2 | echo flag3
- echo flag1 && (echo flag2 | echo flag3)
- (echo flag1 && echo flag2) | echo flag3
- @echo off
- echo.
- echo.前两句输出效果相同,说明第二句的分组符号可以省略,证明 ^| 优先级大于 ^&^&
- pause
- cls
- echo on
- echo flag1 || echo flag2 && echo flag3
- echo flag1 || (echo flag2 && echo flag3)
- (echo flag1 || echo flag2) && echo flag3
- @echo off
- echo.
- echo.前两句输出效果相同,说明第二句的分组符号可以省略,证明 ^&^& 优先级大于 ^|^|
- pause
- cls
- echo on
- echo flag1 || echo flag2 & echo flag3
- (echo flag1 || echo flag2) & echo flag3
- echo flag1 || (echo flag2 & echo flag3)
- @echo off
- echo.
- echo.前两句输出效果相同,说明第二句的分组符号可以省略,证明 ^|^| 优先级大于 ^&
- pause
- cls
- echo.综合测试示例:
- echo.
- echo on
- echo flag1 & more flag2 || echo flag3 && echo flag4 | echo flag5 || echo flag6
- echo flag1 & ((more flag2 || (echo flag3 && (echo flag4 | echo flag5))) || echo flag6)
- (echo flag1 & (more flag2 || (echo flag3 && echo flag4) | echo flag5)) || echo flag6
- @echo off
- echo.
- echo.前两句输出效果相同,说明符合优先级和分组优先级相同,第三句是个反例
- pause
复制代码
|
|