Windows 脚本学习(第五章:组合命令 管道命令)

  • 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 其他管道命令

还有 < 、<& 和 >& ,它们并不常见,在此暂时不讨论了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容

  • 个人学习批处理的初衷来源于实际工作;在某个迭代版本有个BS(安卓手游模拟器)大需求,从而在测试过程中就重复涉及到...
    Luckykailiu阅读 4,679评论 0 11
  • win7 cmd管理员权限设置 net localgroup administrators 用户名 /add 把“...
    f675b1a02698阅读 5,129评论 0 11
  • 部分内容转载自搜狗百科 cmd是command的缩写.即命令提示符(CMD),是在OS / 2 , Windows...
    青冥之上阅读 2,386评论 0 24
  • CMD命令:开始->运行->键入cmd或command(在命令行里可以看到系统版本、文件系统版本) 下载链接:pa...
    wh_阅读 52,823评论 0 25
  • 侄子从四岁开始就被父母打骂。 每次他都哭着来找我, 我安慰他的同时, 还鼓励他,认真的教他写字。 因为侄子和其他小...
    猜名_阅读 435评论 0 1