关于bat:BAT脚本03-组合命令-管道命令

5次阅读

共计 2423 个字符,预计需要花费 7 分钟才能阅读完成。

组合命令

组合命令 &、&& 和 || 是一类用于两个或多个命令语句之间起连接作用的符号。这对于咱们想一次性执行两条或多条命令,以及后面命令执行后果的胜利与否作为前面命令是否被执行的衡量标准,起着决定性的作用。

&

通过紧随的例子,echo Checking what executable files we have in WINDOWS… & dir C:\WINDOWS*.exe & echo And we got lots of stuff here. 咱们不难理解 & 在多个命令之间所起的连贯作用。事实上,咱们齐全能够将这三者分成 3 行来独立执行,因为它们之间是互相独立的关系。不管三者中每一条命令的后果如何,前面的一条命令总能被失去执行(这是与下文 && 和 || 的不同之处)。

&&

&& 作为组合命令之一,与 & 相似,也有着并列多条命令并将其按程序执行的性能。与 & 的不同之处,兴许此时您曾经猜到了,没错,如果多命令中的某一条命令执行出错时,前面的所有命令将不会再被执行;如果始终没有出错则会始终执行完所有的并列命令。为了很好的比照它们之间的区别,咱们别离尝试一下上面的两个例子。
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. 的输入,而后者却没有。

||

|| 的用处与 && 的性能恰好相反。当遇到执行正确的命令后将不再执行前面的命令,如果没有呈现正确的命令则始终执行完所有命令。例如 dir D:\test || md D:\test,如果 D:\test 存在,即第一条命令执行正确的话,前面的创立 D:\test 就不会再执行了;相同,如果第一条命令执行出错,那么前面的命令就起作用了。

在混合应用的时候须要留神它们的优先级。剖析上面几个例子有助于咱们了解它们的执行成果(如果咱们的机器上并没有 Z: 盘的话)。注:浅蓝色的命令示意会被执行到,而深蓝色的命令将不会被执行到。
dir Z: & dir C: || echo Howdy
dir C: & dir Z: || echo Howdy
dir Z: && dir C: || echo Howdy
dir C: && dir Z: || echo Howdy
dir C: && dir C: || echo Howdy

dir C: || echo Howdy & echo Hi there
dir C: || echo Howdy && echo Hi there
dir Z: || echo Howdy & echo Hi there
dir Z: || echo Howdy && echo Hi there
试验一下,看看后果是不是跟预期的一样。

管道命令

>、>>

它们是输入重定向命令,在第 2.2 节中已有具体的介绍。其次要性能就是将一条命令或某个程序输入后果的重定向到特定文件中。> 与 >> 的区别在于,> 会革除调原有文件中的内容后写入指定文件,而 >> 只会追加内容到指定文件中,而不会改变其中的内容。上面将会是一个很有用的例子。

家喻户晓,System32 文件夹是少数木马埋伏和发生的好中央。当咱们刚装好机器的时候,能够给此时机器里还没有病毒、木马的 System32 文件夹里的所有可执行文件 (.exe) 和动态链接库文件 (.dll) 作个记录。等当前察觉 System32 里多了可疑的货色的时候再作个记录,而后跟之前的记录比照一下,就很容易发现问题了。
为了不便作记录,咱们能够执行相似上面的一条命令:dir %windir%\system32*.exe>D:\%DATE:~0,10% 的 exe 文件.txt。其中,%windir% 是以后启动零碎所在的目录,默认状况下通常是 C:\WINDOWS;%DATE:~0,10% 是指当天的日期,比方 2007-11-30,如果您没有遗记在 3.1.4 节里曾形容过的话。而整条命令的后果就是把 System32 里的所有可执行文件名称及信息记录到一个指定的文本文件里了。同理:咱们能够记录 System32 里的所有 dll 文件:dir %windir%\system32*.dll>D:\%DATE:~0,10% 的 dll 文件.txt。
在通过一段时间后,咱们能够再次应用下面两条命令,从而失去两个新的记录文件。而后比照一下两个文件看看有什么差别。DOS 命令里提供了这样一条命令 fc,它容许咱们对两个文件之间的差别进行比拟。应用时就像:fc d:\2007-11-30 的 exe 文件.txt d:\2007-12-01 的 exe 文件.txt。[1]

|

没错,只是一条竖线而已。它能够将它右边命令的输入后果放到它左边的命令里作为输出参数。这种用法据说在 Unix 里很常见。

有个能简略检测机器是否中冰河木马的例子:netstat /a /n | find “7626” && echo 已被冰河感化 || echo 未被冰河感化。其中:
netstat 用于显示以后的网络连接状况,参数 /a 显示所有连贯和监听端口;/n 以数字模式显示地址和端口号。仅仅执行 netstat /a /n 后,您将会看到输入的后果为:各种协定下的本地和指标的地址及端口,以及它们的连贯状态。
命令 find 则能够搜寻指定的字符串,在指定的文件中。netstat /a /n 的输入后果将通过 | 成为命令 find 的第二个参数。因而整个的一条命令能够了解为:在网络连接状态的输入后果中,查找字符串 7626,如果查找胜利的话,将输入被感化的提醒,否则便提醒未感染。&& 和 || 请参考第 5.1.3 节的例子。(端口 7626 是冰河所应用的默认端口。事实上,这并不是一个谨严的检测冰河木马存在的办法,但它却是阐明组合命令和管道命令一个很好的例子)

other

管道命令还有 <、<& 和 >&,它们并不常见,在此临时不探讨了。

正文完
 0