学过汇编或 C 的朋友,肯定都知道 call 指令表示什么意思了,在这里它的意思其实也是一样的。在批处理脚本中,call 命令用来从一个批处理脚本中调用另一个批处理脚本。如下(默认的三个脚本文件名分别为 start.bat 、10.bat 和 ipc.bat):
start.bat:
...... CALL 10.BAT 0 ......
10.bat:
...... ECHO %IPA%.%1 >HFIND.TMP ...... CALL ipc.bat IPCFind.txt
ipc.bat:
for /f "tokens=1,2,3 delims= " %%i in (%1) do call HACK. bat %%i %%j %%k
有没有看出什么不对的地方?没看出来啊?没看出来就对了,其实就没有不对的地方嘛,你怎么看的出来!从上面两个脚本,你可以得到如下信息:
1、脚本调用可以灵活运用,循环运用、重复运用。
2、脚本调用可以使用参数!
关于第一点就不多说了,聪明的你一看就应该会,这里说一下第二点。在 start.bat 中,10.bat 后面跟了参数 0,在执行时的效果,其实就是把 10.bat 里的参数%1 用 0 代替。在start.bat 中, ipc.bat 后面跟了参 数ipcfind.txt(一个文件,也可以做参数),执行时的效果,就是用 ipc.bat 中的每一行的三个变量(这里不懂没关系,学过 for 命令后就懂了),对应代换ipc.bat 中的%%i、%%j 和%%k。这里参数调用是非常灵活的,使用时需要好好体会。
在初学期间,可以先学习只调用脚本,至于连脚本的参数一起使用的情况,在后面的学习中自然就会有比较深刻的理解, 这是因为当你已经可以灵活运用批处理脚本后,如何使代码写的更精简更完美更高效就自然包括到了考虑的范围,这时候你就会发现在调用脚本时直接加入参数,可以使代码效率加倍。
上面的这几个脚本, 都是 Bat.Worm.Muma 病毒的一部分, 在后面的教程里,大家将有机会见到这个病毒的真面目。那是不是说,在同一个目录下至少存在两个批处理脚本文件(只有一个你调用谁?)?注意了,这句话错了!只有一个照样可以调用----调用自身!(默认脚本文件名 a.bat):
net send %1 This is a call example. call a.bat
这两句一结合, 效果自然不怎么样, 因为只有一台机器来发消息, 谁怕谁啊?可如果有 100 台机器同时执行,而且每台机器开100个窗口同时向一个目标机器发消息的话,呵呵。这里 call a.bat 的作用就是调用自身,执行完前一句 net send 命令后再调用自身,达到了循环执行的目的。给出一个很有意思的脚本,有兴趣的朋友可以实验一下(默认脚本文件名为 a.bat):
call a.bat
一定要在 DOS 窗口下执行,否则只会看到一个窗口一闪而过,看不到最后结果。