批处理Bat教程-第五章:组合命令 管道命令

转载自:http://docs.30c.org/dosbat/chapter05/

5.1 组合命令

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

5.1.1 &

通过紧随的例子,

echo Checking what executable files we have in WINDOWS... & dir C:\WINDOWS\*.exe & echo And we got lots of stuff here

我们不难理解 & 在多个命令之间所起的连接作用。事实上,我们完全可以将这三者分成3行来独立执行,因为它们之间是相互独立的关系。不论三者中每一条命令的结果如何,后面的一条命令总能被得到执行(这是与下文 && 和 || 的不同之处)。

5.1.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. 的输出,而后者却没有。

5.1.3 ||

|| 的用途与 && 的功能恰好相反。 当遇到执行正确的命令后将不再执行后面的命令,如果没有出现正确的命令则一直执行完所有命令。 例如 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 

实验一下,看看结果是不是跟预期的一样。

5.2 管道命令

5.2.1 > 、>>

它们是输出重定向命令,在第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 。

5.2.2 |

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

有个能简单检测机器是否中冰河木马的例子:

netstat /a /n | find "7626" && echo 已被冰河感染 || echo 未被冰河感染 。

netstat 用于显示当前的网络连接情况,
参数 /a 显示所有连接和监听端口;
参数 /n 以数字形式显示地址和端口号。
仅仅执行 netstat /a /n 后,您将会看到输出的结果为:各种协议下的本地和目标的地址及端口,以及它们的连接状态。

命令 find 则可以搜索指定的字符串,在指定的文件中。

netstat /a /n 的输出结果将通过 | 成为命令 find 的第二个参数。因此整个的一条命令可以理解为:在网络连接状态的输出结果中,查找字符串 7626 ,如果查找成功的话,将输出被感染的提示,否则便提示未感染。&& 和 || 请参考第5.1.3节的例子。(端口 7626 是冰河所使用的默认端口。事实上,这并不是一个严谨的检测冰河木马存在的方法,但它却是说明组合命令和管道命令一个很好的例子)

5.2.3 管道命令还有 < 、<& 和 >&

它们并不常见,在此暂时不讨论了。[等我学会了再来补充]

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第一章 批处理基础 第一节 常用批处理内部命令简介 1、REM 和 :: 2、ECHO 和 @ 3、PAUSE 4、ERRORLEVEL 5、TITLE 6、COLOR 7、mode 配置系统设备 8、GOTO 和 : 9、FIND 10、START 11、assoc 和 ftype 12、pushd 和 popd 13、CALL 14、shift 15、IF 16、setlocal 与 变量延迟 17、ATTRIB 显示或更改文件属性 第二节 常用特殊符号 1、@ 命令行回显屏蔽符 2、% 批处理变量引导符 3、> 重定向符 4、>> 重定向符 5、<、>&、<& 重定向符 6、| 命令管道符 7、^ 转义字符 8、& 组合命令 9、&& 组合命令 10、|| 组合命令 11、"" 字符串界定符 12、, 逗号 13、; 分号 14、() 括号 15、! 感叹号 第二章 FOR命令详解 一、基本格式 二、参数 /d 三、参数 /R 四、参数 /L 五、参数 /F 第三章 FOR命令中的变量 一、 ~I - 删除任何引号("),扩展 %I 二、 %~fI - 将 %I 扩展到一个完全合格的路径名 三、 %~dI - 仅将 %I 扩展到一个驱动器号 四、 %~pI - 仅将 %I 扩展到一个路径 五、 %~nI - 仅将 %I 扩展到一个文件名 六、 %~xI - 仅将 %I 扩展到一个文件扩展名 七、 %~sI - 扩展的路径只含有短名 八、 %~aI - 将 %I 扩展到文件的文件属性 九、 %~tI - 将 %I 扩展到文件的日期/时间 十、 %~zI - 将 %I 扩展到文件的大小 十一、 %~$PATH:I 第四章 批处理中的变量 一、系统变量 二、自定义变量 第五章 set命令详解 一、用set命令设置自定义变量 二、用set命令进行简单计算 三、用set命令进行字符串处理 1、字符串替换 2、字符串截取 第六章 if命令讲解 第一种用法:IF [NOT] ERRORLEVEL number command 第二种用法:IF [NOT] string1==string2 command 第三种用法:IF [NOT] EXIST filename command 第四种用法:IF增强的用法 第七章 DOS编程高级技巧 一、界面设计 二、if…else…条件语句 三、循环语句 四、子程序 五、用ftp命令实现自动下载 六、用7-ZIP实现命令行压缩和解压功能 七、调用VBScript程序 八、将批处理转化为可执行文件 九、时间延迟 1、利用ping命令延时 2、利用for命令延时 3、利用vbs延迟函数,精确度毫秒,误差1000毫秒内 4、仅用批处理命令实现任意时间延迟,精确度10毫秒,误差50毫秒内 十、模拟进度条 十一、特殊字符的输入及应用 十二、随机数(%random%)的应用技巧 十三、变量嵌套 与 命令嵌套 全文:http://xiangkg.blog.163.com 1、更正了所有的错别字,适当排版,增加条理性。 2、运行改善所有例子,并纠正了一些语法错误。 3、补充了一些不完全的地方。 4、第一章参考了网上许多教程汇编而成。 5、20080229补充了变量延迟的问题。 6、20080305修改了参数usebackq的说明 7、20080310增加了特殊字符的输入及应用 8、20080311修改了子程序部分 9、20080313修改了echo说明,归纳了9个应用方法 10、20080320增加任意时间延迟方法 11、20080321增加了set计算中十进制与八进制混淆问题的说明 12、20080325修正dos数值计算范围:-2147483648 至2147483647,即-2^31~2^31-1 13、20080326增加随机数的应用 14、20080327修改了“if增强用法”中的defined语句说明 15、20080402增加变量嵌套与命令嵌套,重要技巧之一。 不断学习中,不断更新中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值