批处理最完整⼈性化教程(.bat⽂件语法)
这是⼀篇技术教程,我会⽤很简单的⽂字表达清楚⾃⼰的意思,你要你识字就能看懂,就能学到知识。写这篇教程的⽬的,是让每⼀个看过这些⽂字的朋友记住⼀句话:如果爱可以让事情变的更简单,那么就让它简单吧!看这篇教程的⽅法,就是慢!慢慢的,如同品⼀个⼥⼈、⼀杯茗茶,你会发现很多以前就在眼前的东西突然变的很遥远,⽽有些很遥远的东西却⼜突然回到了眼前。
先概述⼀下批处理是个什么东东。批处理的定义,⾄今我也没能给出⼀个合适的----众多⾼⼿们也都没给出----反正我不知道----看了我也不⼀定信服----我是个菜鸟,当然就更不⽤说了;但我想总结出⼀个“⽐较合适的”,⽽且我也相信⾃⼰可以把它解释的很清楚,让更多的菜鸟都知道这是个什么东东,你⽤这个东东可以⼲什么事情。或许你会因为这篇⽂章⽽“⽆条件爱上批处理”,那么我的⽬的就达到了----我就是要让你爱上它,我就这么拽,你能怎么着??真的,爱有时候就这么拽,就是这么没理由,就是这么不要脸!真的!
按照我的理解,批处理的本质,是⼀堆DOS命令按⼀定顺序排列⽽形成的集合。
OK,never claver and get to business(闲话少说⾔归正传)。批处理,也称为批处理脚本,英⽂译为BATCH,批处理⽂件后缀BAT就取的前三个字母。它的构成没有固定格式,只要遵守以下这条就ok了:每⼀⾏可视为⼀个命令,每个命令⾥可以含多条⼦命令,从第⼀⾏开始执⾏,直到最后⼀⾏结束,它运
⾏的平台是DOS。批处理有⼀个很鲜明的特点:使⽤⽅便、灵活,功能强⼤,⾃动化程度⾼。我不想让⾃⼰写的教程枯燥⽆味,因为牵缠到代码(批处理的内容算是代码吧?)的问题本来就是枯燥的,很少有⼈能⾯对满屏幕的代码⽽静下⼼来。所以我会⽤很多简单实⽤的例⼦让读这篇教程的朋友去体会批处理的那四射的魅⼒,感受它那古灵精怪的性格,不知不觉中爱上批处理(晕,怎么⼜是爱?到底批处理和爱有什么关系?答案:没有!)。再说句“闲话”:要学好批处理,DOS基础⼀定要牢!当然脑⼦灵活也是很重要的⼀⽅⾯。
例⼀、先给出⼀个最easy的批处理脚本让⼤家和它混个脸熟,将下⾯的⼏⾏命令保存为name.bat然后执⾏(以后⽂中只给出代码,保存和执⾏⽅式类似):
t.com > a.txt
t.com >> a.txt
t.com >> a.txt
t.com >> a.txt
t.com >> a.txt
scheduled
t.com >> a.txt
t.com >> a.txt
t.com >> a.txt
exit
是不是都能看的懂?是不是很easy?但它的作⽤却是很实⽤的,执⾏这个批处理后,可以在你的当前盘建⽴⼀个名为a.txt的⽂件,它⾥⾯记录的信息可以帮助你迅速找到速度最快的QQ服务器,从⽽远离“从服务器中转”那⼀痛苦的过程。这⾥>的意思,是把前⾯命令得到的东西放到后⾯所给的地⽅,>>的作⽤,和>的相同,区别是把结果追加到前⼀⾏得出的结果的后⾯,具体的说是下⼀⾏,⽽前⾯⼀⾏命令得出的结果将保留,这样可以使这个a.txt⽂件越来越⼤(想到如何搞破坏了??)。By the way,这个批处理还可以和其他命令结合,搞成完全⾃动化判断服务器速度的东东,执⾏后直接显⽰速度最快的服务器IP,是不是很爽?后⾯还将详细介绍。
例⼆、再给出⼀个已经过时的例⼦(a.bat):
@echo off
if exist C:\Progra~1\Tencent\AD\*.gif del C:\Progra~1\Tencent\AD\*.gif
a.bat
为什么说这是个过时的例⼦呢?很简单,因为现在已经⼏乎没有⼈⽤带⼴告的QQ了(KAO,我的QQ还显⽰好友三围呢!!),所以它⼏乎⽤不上了。但曾经它的作⽤是不可⼩窥的:删除QQ的⼴告,让对话框⼲⼲净净。这⾥⽤的地址是QQ的默认安装地址,默认批处理⽂件名为a.bat,你当然可以根据情况⾃⾏修改。在这个脚本中使⽤了if命令,使得它可以达到适时判断和删除⼴告图⽚的效果,你只需要不关闭命令执⾏后的DOS窗⼝,不按CTRL+C强⾏终⽌命令,它就⼀直监视是否有⼴告图⽚(QQ也再不断查看⾃⼰的⼴告是否被删除)。当然这个脚本占⽤你⼀点点内存,呵呵。
例三,使⽤批处理脚本查是否中冰河。脚本内容如下:
@echo off
www 33ri comnetstat -a -n > a.txt
| find "7626" && echo "Congratulations! You have infected GLACIER!"
pau & exit
这⾥利⽤了netstat命令,检查所有的⽹络端⼝状态,只需要你清楚常见⽊马所使⽤的端⼝,就能很ea
sy的判断出来是否被⼈种了冰河。然这不是确定的,因为冰河默认的端⼝7626,完全可以被⼈修改。这⾥介绍的只是⽅法和思路。这⾥介绍的是⽅法和思路稍做改动,就变成可以检查其他⽊马的脚本了,再改动⼀下,加进去参数和端⼝及信息列表⽂件后,就变成⾃动检测所有⽊马的脚本了。呵呵,是不是很过瘾?脚本中还利⽤了组合命令&&和管道命令|,后⾯将详细介绍。
例四,借批处理⾃动清除系统垃圾,脚本如下:
@echo off
if exist c:\windows\temp\*.* del c:\windows\temp\*.*
if exist c:\windows\Tempor~1\*.* del c:\windows\Tempor~1\*.*
if exist c:\windows\History\*.* del c:\windows\History\*.*
if exist c:\windows\recent\*.* del c:\windows\recent\*.*
将以上脚本内容保存到autoexec.bat⾥,每次开机时就把系统垃圾给⾃动删除了。这⾥需要注意两点:⼀、DOS不⽀持长⽂件名,所以就出现了Tempor~1这个东东;⼆、可根据⾃⼰的实际情况进⾏改动,使其符合⾃⼰的要求。single是什么意思
怎么样,看到这⾥,你对批处理脚本是不是已经有点兴趣了?是不是发现⾃⼰已经慢慢爱上了这个东东?别⾼兴的太早,爱不是⼀件简单的事,它也许能带给你快乐和幸福,当然也能让你痛苦的想去跳楼。如果你知道很难还敢继续的话,I 服了 YOU!继续努⼒吧,也许到最后你不⼀定得到真爱(真的有这可能,爱过的⼈都知道),但你可以体会到整个爱的过程,就是如此。酸、苦和辣,有没有甜天知道。
为什么会把批处理和爱情扯上关系?不是我⽆聊,也不是因为这样写有趣多少,原因有⼆:其⼀,批处理和爱情有很多相同的地⽅,有些地⽅我⽤“专业”的⾏话解释不清(我不怀疑⾃⼰的表达能⼒,⽽是事情本⾝就不好说清楚),说了=没说,但⽤地球⼈都知道的爱情⼀⽐喻(爱情是什么?我**怎么知道!!),没准你⼼⾥⼀下就亮堂了,事半功倍,何乐⽽不为?其⼆,我这段时间状态不是很好,感冒发烧头疼⿐塞,但主要还是感情上精神摧残,搞的⼈烦透了,借写教程之际感慨⼏句,⼤家就全当买狗⽪膏药了,完全可以省略不看(也许还真有点效果----不⾄于让你看着看着就睡着了,把头磕了来找我报销医药费)。说不定下次的教程中⼤家还会看到杨过、张⽆忌等⾦⽼前辈笔下的英雄们。
看过第⼀章的朋友,⼀定对批处理有了初步的印象,知道它到底是⽤来⼲什么的了。但你知道运⽤批处理的精髓在哪⾥吗?其实很简单:思路要灵活!没有做不到的,只有想不到的。这和爱情就有点不同了,因为爱情的世界是两个⼈的世界,⼀厢情愿不叫爱情(补充:那叫单恋。废话!)⽽批处理却是⼀个⼈的天堂,你可以为所欲为,没有达不到的境界!
simplelife
批处理看起来杂乱⽆章,但它的逻辑性之强,绝对不⽐其他程序语⾔(如汇编)低,如果你写的脚本是⼀堆乱⿇,虽然每⼀⾏命令都正确,但从头执⾏到尾后,不⼀定得到你想要的结果,也许是⼀屏幕的Bad command or fail name。这⼜和爱情有了共同点:按步骤来经营,缺少或增多的步骤都可能导致不想看见的结果。陷⼊爱河的朋友,相信没有不肯定这句话的。我的爱情批处理,输出的结果不是Bad command or fail name,屏幕是这么显⽰的:‘你的爱情'不是内部或外部命令,也不是可运⾏的程序或批处理⽂件。然后就是光标不停闪动,等待这下⼀次错误的输⼊。
从这⼀章开始,将由浅⼊深的介绍批处理中常⽤的命令,很多常见DOS命令在批处理脚本中有这⼴泛的应⽤,它们是批处理脚本的BODY部分,但批处理⽐DOS更灵活多样,更具备⾃动化。要学好批处理,DOS⼀定要有⽐较扎实的基础。这⾥只讲述⼀些⽐较少⽤(相对来说)的DOS命令,常⽤命令如COPY、DIR等就不做介绍了(这些看似简单的命令实际复杂的很,我怕⾃⼰都说不清楚!)。
例五,先看⼀个实例。这是⼀个很有意思的脚本,⼀个⼩巧实⽤的好东东,把批处理“⾃动化”的特点体现的淋漓尽致。先介绍⼀下这个脚本的来历:⼤家都知道汇编程序(MASM)的上机过程,先要对源代码进⾏汇编、连接,然后再执⾏,⽽这中间有很多环节需要输⼊很多东西,⿇烦的很(只有经历过的朋友才懂得)。如何使这个过程变的简单呢?在我们搞汇编课程设计时,我“被逼”写了这个脚本,⽤起来很爽,呵呵。看看脚本内容:
@echo off
::clo echo
cls
::clean screen
echo This programme is to make the MASM programme automate
::display info
echo Edit by CODERED
::display info
echo Mailto me : qqkiller***@
::display info
if "%1"=="" goto usage
::if input without paramater goto usage
if "%1"=="/?" goto usage
::if paramater is "/?" goto usage
if "%1"=="help" goto usage
::if paramater is "help" goto usage
pau
::pau to e usage
masm %1.asm
::asmble the .asm code
if errorlevel 1 pau & edit %1.asm
::if error pau to e error msg and edit the code
link %1.obj & %1
:
:el link the .obj file and execute the .exe file
:usage
::t usage
echo Usage: This BAT file name [asm file name]
echo Default BAT file name is START.BAT
::display usage
japanegirlswet 16先不要被这⼀堆的东西给吓怕了,静下⼼来仔细的看(回想⼀下第⼀章中第⼀段是怎么写的!!)。已经给出了每⼀⾏命令的解释,两个冒号后⾯的内容为前⼀⾏内容解释的E⽂(害怕E⽂的朋友也不⽤担⼼,都很easy,⼀看就懂了,实在不懂了不会查词典啊,这么懒?),在脚本执⾏时不显⽰,也不起任何作⽤。倒数第5⾏⾏⾸有⼀个冒号,可不是笔误哦!具体作⽤后⾯会详细讲到。此脚本中masm和link是汇编程序和连接程序,必须和edit程序以及你要编辑的源代码(当然还有这个脚本,废话!)⼀起在当前⽬录中。使⽤这个批处理脚本,可以最⼤可能的减少⼿⼯输⼊,整个过程中只需要按⼏下回车键,即可实现从汇编源代码到可执⾏exe⽂件的⾃动化转换,并具备智能判断功能:如果汇编时源代码出现错误(汇编不成功),则⾃动暂停显⽰错误信息,并在按任意键后⾃动进⼊编辑源代码界
⾯;如果源代码汇编成功,则进⾏连接,并在连接后⾃动执⾏⽣成的exe⽂件。另外,由于批处理命令的简单性和灵活性,这个脚本还具备良好的可改进性,简单进⾏修改就可以符合不同朋友的上机习惯。正在学汇编的朋友,⼀定别忘了实习⼀下!
在这个脚本中出现了如下⼏个命令:@、echo、::、pau、:和goto、%以及if。⽽这⼀章就将讲述这⼏个命令。
1、@
这个符号⼤家都不陌⽣,email的必备符号,它怎么会跑到批处理中呢?呵呵,不是它的错,批处理本来就离不开它,要不就不完美了。它的作⽤是让执⾏窗⼝中不显⽰它后⾯这⼀⾏的命令本⾝(多么绕⼝的⼀句话!)。呵呵,通俗⼀点说,⾏⾸有了它的话,这⼀⾏的命令就不显⽰了。在例五中,⾸⾏的@echo off中,@的作⽤就是让脚本在执⾏时不显⽰后⾯的echo off部分。这下懂了吧?还是不太懂?没关系,看完echo命令简介,⾃然就懂了。
2、echo
中⽂为“反馈”、“回显”的意思。它其实是⼀个开关命令,就是说它只有两种状态:打开和关闭。于是就有了echo on和echo off两个命令了。直接执⾏echo命令将显⽰当前echo命令状态(off或on)执⾏echsunshine girl什么意思>英文翻译中文在线翻译
o off将关闭回显,它后⾯的所有命令都不显⽰命令本⾝,只显⽰执⾏后的结果,除⾮执⾏echo on命令。在例五中,⾸⾏的@命令和echo off命令联合起来,达到了两个⽬的:不显⽰echo off命令本⾝,不显⽰以后各⾏中的命令本⾝。的确是有点乱,但你要是练习⼀下的话,3分钟包会,不会的退钱!
echo命令的另⼀种⽤法⼀:可以⽤它来显⽰信息!如例五中倒数第⼆⾏,Default BAT file name is START.BAT将在脚本执⾏后的窗⼝中显⽰,⽽echo命令本⾝不显⽰(为什么??)。
echo命令的另⼀种⽤法⼆:可以直接编辑⽂本⽂件。例六:
echo nbtstat -A 192.168.0.1 > a.bat
echo nbtstat -A 192.168.0.2 >> a.bat
echo nbtstat -A 192.168.0.3 >> a.bat
以上脚本内容的编辑⽅法是,直接是命令⾏输⼊,每⾏⼀回车。最后就会在当前⽬录下⽣成⼀个a.bat的⽂件,直接执⾏就会得到结果。
3、::
这个命令的作⽤很简单,它是注释命令,在批处理脚本中和rem命令等效。它后⾯的内容在执⾏时不显⽰,也不起任何作⽤,因为它只是注释,只是增加了脚本的可读性,和C语⾔中的/*…………*/类似。地球⼈都能看懂,就不多说了。
4、pau
中⽂为“暂停”的意思(看看你的workman上),我⼀直认为它是批处理中最简单的⼀个命令,单纯、实⽤。它的作⽤,是让当前程序进程暂停⼀下,并显⽰⼀⾏信息:请按任意键继续. . .。在例五中这个命令运⽤了两次,第⼀次的作⽤是让使⽤者看清楚程序信息,第⼆个是显⽰错误的汇编代码信息(其实不是它想显⽰,⽽是masm程序在显⽰错误信息时被暂它停了,以便让你看清楚你的源代码错在哪⾥)。
5、:和goto
为什么要把这两个命令联合起来介绍?因为它们是分不开的,⽆论少了哪个或多了哪个都会出错。goto是个跳转命令,:是⼀个标签。当程序运⾏到goto时,将⾃动跳转到:定义的部分去执⾏了(是不是分不开?)。例五中倒数第5⾏⾏⾸出现⼀个:,则程序在运⾏到goto时就⾃动跳转到:标签定义的部分执⾏,结果是显⽰脚本usage(usage就是标签名称)。不难看出,goto命令就是根据这个冒号和标签名称来寻找它该跳转的地⽅,它们是⼀⼀对应的关系。goto命令也经常和if命令结合使⽤。⾄于
这两个命令具体⽤法,参照例五。
goto命令的另⼀种⽤法⼀:提前结束程序。在程序中间使⽤goto命令跳转到某⼀标签,⽽这⼀标签的内容却定义为退出。如:
……
goto end
……
:end
这⾥:end在脚本最后⼀⾏!其实这个例⼦很弱智,后⾯讲了if命令和组合命令你就知道了。
6、%
这个百分号严格来说是算不上命令的,它只是批处理中的参数⽽已(多个%⼀起使⽤的情况除外,以后还将详细介绍),但千万别以为它只是参数就⼩看了它(看看例五中有多少地⽅⽤到它?),少了它批处理的功能就减少了51%了。看看例七:
net u \\%1\ipc$ %3 /u:"%2"
copy 11.BAT \\%1\admin$\system32 /y
copy 13.BAT \\%1\admin$\system32 /y
copy ipc2.BAT \\%1\admin$\system32 /y
copy NWZI.EXE \\%1\admin$\system32 /y
attrib \\%1\admin$\system32\10.bat -r -h -s
以上代码是Bat.Worm.Muma病毒中的⼀部分,%1代表的IP,2%代表的urname,3%代表password。执⾏形式为:脚本⽂件名参数⼀参数⼆ ……。假设这个脚本被保存为a.bat,则执⾏形式如下:a IP urname password。这⾥IP、urname、password是三个参数,缺⼀不可(因为程序不能正确运⾏,并不是因为少了参数语法就不对)这样在脚本执⾏过程中,脚本就⾃动⽤⽤你的三个参数依次(记住,是依次!也是⼀⼀对应的关系。)代换1%、2%和3%,这样就达到了灵活运⽤的⽬的(试想,如果在脚本中直接把IP、urname和password都定义死,那么脚本的作⽤也就被固定了,但如果使⽤%的话,不同的参数可以达到不同的⽬的,是不是更灵活?)。
关于这个参数的使⽤,在后续章节中还将介绍。⼀定要⾮常熟练才⾏,这需要很多练习过程,需要下点狠⼯夫!
kol什么意思
这⼀章就写到这⾥了。可能有朋友问了:怎么没介绍if命令?呵呵,不是我忘了,⽽是它不容易说清楚,下⼀章再讲了!这⼀章讲的这点东西,如果你是初学者,恐怕也够消化的了。记住⼀句话:DOS是批处理的BODY,任何⼀个DOS命令都可以被⽤在批处理脚本中去完成特定的功能。到这⾥,你是否已经想到了⽤⾃⼰肚⼦⾥的东西去写点带有⾃动化⾊彩的东东呢?很简单,就是⼀个DOS命令的集合⽽已,相信⾃称为天才的你已经会把计算机等级考试上机试题中的DOS部分⽤批处理来⾃动化完成了。情人节英语怎么说
烦!就好象⼀个半⽼⼥⼈到了更年期,什么事都想唠叨⼏句,什么事都感到不舒服,看谁谁不爽。明知⼭有虎,偏向虎⼭⾏,最后留下⼀⾝伤痕⽆功⽽返时,才发现⾃⼰竟然如此脆弱,如此渺⼩,如此不堪⼀击。徘徊在崩溃的边缘,突然回想起了⾃⼰最后⼀次扁⼈的那⼀刻,还真有点怀念(其实我很不喜欢扁⼈,更不喜欢被⼈扁)。我需要发泄,我⽤⼿指拼命的敲打着键盘,在⼀阵接⼀阵有节奏的声⾳中,屏幕上出现了上⾯的这些⽂字。可难道这就是发泄的另⼀种⽅式吗?中国⼈还是厉害,早在⼏千年前孔⽼夫⼦就说过“唯⼥⼦与⼩⼈,难养也”,真**有先见之明,佩服!虽然是在发泄,不过⼤家请放⼼,以我的脾⽓,既然决定写这篇教程,就⼀定会尽⼒去写好,写完美,绝对不给⾃⼰留下遗憾,要不这教程就不是我写的!
曾经有⼀篇经典的批处理教程出现在你的屏幕上,你没有保存,直到找不到它的链接你才后悔莫及,⼈世间最⼤的痛苦莫过于此。如果上天能给你⼀个再看⼀次的机会,你会对那篇教程说三个字:我爱你!如果⾮要给这份爱加上⼀个期限,你希望是100年。因为100年后,你恐怕早已经挂了!⽽现在,你的屏幕上出现了这篇你正在看的批处理教程,虽然不如你曾经看的那篇经典,但如果勉强还过的去。你会爱它吗?时间会有50年那么长吗?答案是:试试看吧。
批处理脚本中最重要的⼏个命令,将在这⼀章详细介绍,但是很遗憾,有些细节到现在我都没掌握的很好,甚⾄还有些⽣分。如同还不太懂得爱⼀样。但我⼀直都在努⼒,即使⼀直都没有收获。所以可能讲的会⽐较笼统,但我会告诉你⽅法,剩下的就是时间问题了,需要⾃⼰去磨练。让我们共同努⼒吧。冰冻三尺⾮⼀⽇之寒,滴⽔穿⽯⾮⼀⽇之功。有些事情,⽐如学批处理,⽐如爱⼀个⼈,都是不能速成的,甚⾄还会有付出艰⾟⽽收获为甚微的情况。再次重申,看这篇教程的时候,⼀定要静下⼼来,除⾮你已经掌握了这篇教程的所有东西----但那也就不必看了,浪费时间!
7、if
接上⼀章,接着讲if命令。总的来说,if命令是⼀个表⽰判断的命令,根据得出的每⼀个结果,它都可以对应⼀个相应的操作。关于它的三种⽤法,在这⾥分开讲。
(1)、输⼊判断。还是⽤例五⾥⾯的那⼏句吧:
if "%1"=="" goto usage
if "%1"=="/?" goto usage
if "%1"=="help" goto usage
这⾥判断输⼊的参数情况,如果参数为空(⽆参数),则跳转到usage;如果参数为/?或help时(⼤家⼀般看⼀个命令的帮助,是不是输⼊的/?或help呢,这⾥这么做只是为了让这个脚本看起来更像⼀个真正的程序),也跳转到usage。这⾥还可以⽤否定形式来表⽰“不等于”,例如:if not "%1"=="" goto usage,则表⽰如果输⼊参数不为空就跳转到usage(实际中这样做就没意义了,这⾥介绍⽤法,管不了那么多了,呵呵。)是不是很简单?其实翻译成中⽂体会⼀下就understand了。
(2)、存在判断。再看例⼆⾥这句:
if exist C:\Progra~1\Tencent\AD\*.gif del C:\Progra~1\Tencent\AD\*.gif
如果存在那些gif⽂件,就删除这些⽂件。当然还有例四,都是⼀样的道理。注意,这⾥的条件判断是判断存在的,当然也可以判断不存在的,例如下⾯这句“如果不存在那些gif⽂件则退出脚本”:if not exist C:\Progra~1\Tencent\AD\*.gif exit。只是多⼀个not来表⽰否定⽽已。
(3)、结果判断。还是拿例五开⼑(没想到⾃⼰写的脚本,竟然⽤处这么⼤,呵呵):
masm %1.asm
if errorlevel 1 pau & edit %1.asm
link %1.obj
先对源代码进⾏汇编,如果失败则暂停显⽰错误信息,并在按任意键后⾃动进⼊编辑界⾯;否则⽤link程序连接⽣成的obj⽂件。这⾥只介绍
⼀下和if命令有关的地⽅,&命令后⾯会讲到。这种⽤法是先判断前⼀个命令执⾏后的返回码(也叫错误码,DOS程序在运⾏完后都有返回码),如果和定义的错误码符合(这⾥定义的错误码为1),则执⾏相应的操作(这⾥相应的操作为pau & edit %1.asm部分)。
另外,和其他两种⽤法⼀样,这种⽤法也可以表⽰否定。⽤否定的形式仍表达上⾯三句的意思,代码变为:
masm %1.asm
if not errorlevel 1 link %1.obj
pau & edit %1.asm
看到本质了吧?其实只是把结果判断后所执⾏的命令互换了⼀下,“if not errorlevel 1”和“if errorlevel 0”的效果是等效的,都表⽰上⼀句masm 命令执⾏成功(因为它是错误判断,⽽且返回码为0,0就表⽰否定,就是说这个错误不存在,就是说masm执⾏成功)。这⾥是否加not,错误码到底⽤0还是1,是值得考虑的两个问题,⼀旦搭配不成功脚本就肯定出错,所以⼀定要体会的很深刻才⾏。如何体会的深刻?练习!⾃⼰写⼀个脚本,然后把有not和没有not的情况,返回码为0或1的情况分别写进去执⾏(怎么,嫌⿇烦啊?排列组合算⼀下才四中情况你就嫌⿇烦了?后⾯介绍管道命令和组合命令时还有更⿇烦的呢!怕了?呵呵。),这样从执⾏的结果中就能很清楚的看出这两种情况的区别。
这种⽤errorlevel结果判断的⽤法是if命令最难的⽤法,但也恰恰是最有⽤的⽤法,如果你不会⽤errorlevel来判断返回码,则要达到相同的效果,必须⽤el来表⽰“否则”的操作,是⽐较⿇烦的。以上代码必须变成:
masm %1.asm
if exist %1.obj link %1.obj
el pau & edit %1.asm
关于if命令的这三种⽤法就say到这⾥,理解很简单,但应⽤时就不⼀定⽤的那么得⼼应⼿,主要是熟
picture是什么意思练程度的问题。可能有的朋友有点惊讶,我怎么没给出类似下⾯三⾏的⽤法介绍,是因为下⾯三⾏是if命令帮助⾥对它⾃⾝⽤法的解释,任何⼈只要⼀个“if /?”就能看到,我没有必要在这⾥多费⼝⾆;更重要的原因,是我觉得这样介绍的不清楚,看的⼈不⼀定看的懂,所以我采⽤上⾯⾃⼰对if命令的理解来介绍。⼀定要注意的是,这三种⽤法的格式各不相同,⽽且也是不能改变的,但实际上可以互换(以为从本质上讲,这三种⽤法都是建⽴在判断的基础上的,哲学教我们学会透过现象看事物本质!)。有兴趣的朋友可以⾃⼰研究⼀下。
IF [NOT] ERRORLEVEL number do command
IF [NOT] string1==string2 do command
IF [NOT] EXIST filename do command
8、call
学过汇编或C的朋友,肯定都知道call指令表⽰什么意思了,在这⾥它的意思其实也是⼀样的。在批处理脚本中,call命令⽤来从⼀个批处理脚本中调⽤另⼀个批处理脚本。看例⼋(默认的三个脚本⽂件名分别为start.bat、10.bat和ipc.bat):
start.bat:
……
CALL 10.BAT 0
……
10.bat:
……
ECHO %IPA%.%1 >HFIND.TMP
……
CALL ipc.
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后⾯跟了参数(⼀个⽂件,也可以做参数),执⾏时的效果,就是⽤ipc.bat中的每⼀⾏的三个变量(这⾥不懂没关系,学过for命令后就懂了),对应代换ipc.bat中的%%i、%%j和%%k。这⾥参数调⽤是⾮常灵活的,使⽤时需要好好体会。在初学期间,可以先学习只调⽤脚本,⾄于连脚本的参数⼀起使⽤的情况,在后⾯的学习中⾃然就会有⽐较深刻的理解,这是因为当你已经可以灵活运⽤批处理脚本后,如何使代码写的更精简更完美更⾼效就⾃然包括到了考虑的范围,这时候你就会发现在调⽤脚本时直接加⼊参数,可以使代码效率加倍。By the way,上⾯的这⼏个脚本,都是Bat.Worm.Muma病毒的⼀部分,在后⾯的教程⾥,⼤家将有机会见到这个病毒的真⾯⽬。那是不是说,在同⼀个⽬录下⾄少存在两个批处理脚本⽂件(只有⼀个你调⽤谁?)?呵呵,注意了,这句话错了!!只有⼀个照样可以调⽤----调⽤⾃⾝!看例九(默认脚本⽂件名a.bat):
net nd %1 This is a call example.
call a.bat
这两句⼀结合,效果⾃然不怎么样,因为只有⼀台机器来发消息,谁怕谁啊?我给你来个礼尚往来!
可如果有100台机器同时执⾏,⽽且每台机器开10和窗⼝同时向⼀个⽬标机器发消息的话,呵呵。这⾥call a.bat的作⽤就是调⽤⾃⾝,执⾏完前⼀句net nd命令后再调⽤⾃⾝,