⼗分经典的windows批处理教程
这是⼀篇技术教程,真⼼诚意会⽤很简单的⽂字表达清楚⾃⼰的意思,只要你识字就能看懂,就能学到知识。写这篇教程的⽬的,是让每⼀个看过这些⽂字的朋友记住⼀句话:如果爱可以让事情变的更简单,那么就让它简单吧!看这篇教程的⽅法,就是慢!慢慢的,如同品⼀个⼥⼈、⼀杯茗茶,你会发现很多以前就在眼前的东西突然变的很遥远,⽽有些很遥远的东西却⼜突然回到了眼前。.
先概述⼀下批处理是个什么东东。批处理的定义,⾄今我也没能给出⼀个合适的----众多⾼⼿们也都没给出----反正我不知道----看了我也不⼀定信服 ----我是个菜鸟,当然就更不⽤说了;但我想总结出⼀个"⽐较合适的",⽽且我也相信⾃⼰可以把它解释的很清楚,让更多的菜鸟都知道这是个什么东东,你⽤这个东东可以⼲什么事情。或许你会因为这篇⽂章⽽"⽆条件爱上批处理",那么我的⽬的就达到了----我就是要让你爱上它,我就这么拽,你能怎么着??真的,爱有时候就这么拽,就是这么没理由,就是这么不要脸!真的!
按照我的理解,批处理的本质,是⼀堆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
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
met rxa.bat
为什么说这是个过时的例⼦呢?很简单,因为现在已经⼏乎没有⼈⽤带⼴告的QQ了(KAO,我的QQ还显⽰好友三围呢!!),所以它⼏乎⽤不上了。但曾经它的作⽤是不可⼩窥的:删除QQ的⼴告,让对话框⼲⼲净净。这⾥⽤的地址是QQ的默认安装地址,默认批处理⽂件名为a.bat,你当然可以根据情况⾃⾏修改。在这个脚本中使⽤了if命令,使得它可以达到适时判断和删除⼴告图⽚的效果,你只需要不关闭命令执⾏后的DOS窗⼝,不按CTRL+C强⾏终⽌命令,它就⼀直监视是否有⼴告图⽚(QQ也再不断查看⾃⼰的⼴告是否被删除)。当然这个脚本占⽤你⼀点点内存,呵呵。
例三,使⽤批处理脚本查是否中冰河。脚本内容如下:
@echo off
netstat -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\*.*
cfcif exist c:\windows\recent\*.* del c:\windows\recent\*.*
将以上脚本内容保存到autoexec.bat⾥,每次开机时就把系统垃圾给⾃动删除了。这⾥需要注意两点:⼀、DOS不⽀持长⽂件名,所以就出现了 Tempor~1这个东东;⼆、可根据⾃⼰的实际情况进⾏改动,使其符合⾃⼰的要求。怎么样,看到这⾥,你对批处理脚本是不是已经有点兴趣了?是不是发
现⾃⼰已经慢慢爱上了这个东东?别⾼兴的太早,爱不是⼀件简单的事,它也许能带给你快乐和幸福,当然也能让你痛苦的想去跳楼。如果你知道很难还敢继续的话, I 服了 YOU!继续努⼒吧,也许到最后你不⼀定得到真爱(真的有这可能,爱过的⼈都知道),但你可以体会到整个爱的过程,就是如此。酸、苦和辣,有没有甜天知道。为什么会把批处理和爱情扯上关系?不是我⽆聊,也不是因为这样写有趣多少,原因有⼆:其⼀,批处理和爱情有很多相同的地⽅,有些地⽅我⽤"专业"的⾏话解释不清(我不怀疑⾃⼰的表达能⼒,⽽是事情本⾝就不好说清楚),说了=没说,但⽤地球⼈都知道的爱情⼀⽐喻(爱情是什么?我 **怎么知道!!),没准你⼼⾥⼀下就亮堂了,事半功倍,何乐⽽不为?其⼆,我这段时间状态不是很好,感冒发烧头疼⿐塞,但主要还是感情上精神摧残,搞的⼈烦透了,借写教程之际感慨⼏句,⼤家就全当买狗⽪膏药了,完全可以省略不看(也许还真有点效果----不⾄于让你看着看着就睡着了,把头磕了来找我报销医药费)。说不定下次的教程中⼤家还会看到杨过、张⽆忌等⾦⽼前辈笔下的英雄们。
看过第⼀章的朋友,⼀定对批处理有了初步的印象,知道它到底是⽤来⼲什么的了。但你知道运⽤批处理的精髓在哪⾥吗?其实很简单:思路要灵活!没有做不到的,只有想不到的。这和爱情就有点不同了,因为爱情的世界是两个⼈的世界,⼀厢情愿不叫爱情(补充:那叫单恋。废话!)⽽批处理却是⼀个⼈的天堂,你可以为所欲为,没有达不到的境界!
批处理看起来杂乱⽆章,但它的逻辑性之强,绝对不⽐其他程序语⾔(如汇编)低,如果你写的脚本
是⼀堆乱⿇,虽然每⼀⾏命令都正确,但从头执⾏到尾后,不⼀定得到你想要的结果,也许是⼀屏幕的Bad command or fail name。这⼜和爱情有了共同点:按步骤来经营,缺少或增多的步骤都可能导致不想看见的结果。陷⼊爱河的朋友,相信没有不肯定这句话的。我的爱情批处理,输出的结果不是Bad command or fail name,屏幕是这么显⽰的:‘你的爱情'不是内部或外部命令,也不是可运⾏的程序或批处理⽂件。然后就是光标不停闪动,等待这下⼀次错误的输⼊。
whether和if的区别
从这⼀章开始,将由浅⼊深的介绍批处理中常⽤的命令,很多常见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
headcount什么意思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 usageobviously
先不要被这⼀堆的东西给吓怕了,静下⼼来仔细的看(回想⼀下第⼀章中第⼀段是怎么写的!!)。已经给出了每⼀⾏命令的解释,两个冒号后⾯的内容为前⼀⾏内容解释的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)执⾏echo off将关闭回显,它后⾯的所有命令都不显⽰命令本⾝,只显⽰执⾏后的结果,除⾮执⾏echo on命令。在例五中,⾸⾏的@命令和echo off命令联合起来,达到了两个⽬的:不显⽰echo off命令本⾝,不显⽰以后各⾏中的命令本⾝。的确是有点乱,但你要是练习⼀下的话,3分钟包会,不会的退钱!
echo命令的另⼀种⽤法
⼀:可以⽤它来显⽰信息!如例五中倒数第⼆⾏,Default BAT file name is START.BAT将在脚本执⾏后的窗⼝中显
⽰,⽽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
为什么要把这两个命令联合起来介绍?因为它们是分不开的,⽆论少了哪个或多了哪个都会出错。got
o是个跳转命令,:是⼀个标签。当程序运⾏到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.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都定义死,那么脚本的作⽤也就被固定了,但如果使⽤%的话,不同的参数可以达到不同的⽬的,是不是更灵活?)。
关于这个参数的使⽤,在后续章节中还将介绍。⼀定要⾮常熟练才⾏,这需要很多练习过程,需要下点狠⼯夫!
这⼀章就写到这⾥了。可能有朋友问了:怎么没介绍if命令?呵呵,不是我忘了,⽽是它不容易说清楚,下⼀章再讲了!这⼀章讲的这点东西,如果你是初学者,恐怕也够消化的了。记住⼀句话:DOS是批处理的BODY,任何⼀个DOS命令都可以被⽤在批处理脚本中去完成特定的功能。到这⾥,你是否已经想到了⽤⾃⼰肚⼦⾥的东西去写点带有⾃动化⾊彩的东东呢?很简单,就是⼀个DOS命令的集合⽽已,相信⾃称为天才的你已经会把计算机等级考试上机试题中的DOS部分⽤批处理来⾃动化完成了。
烦!就好象⼀个半⽼⼥⼈到了更年期,什么事都想唠叨⼏句,什么事都感到不舒服,看谁谁不爽。明知⼭有虎,偏向虎⼭⾏,最后留下⼀⾝伤痕⽆功⽽返时,才发现⾃⼰竟然如此脆弱,如此渺⼩,如此不堪⼀击。徘徊在崩溃的边缘,突然回想起了⾃⼰最后⼀次扁⼈的那⼀刻,还真有点怀念(其实我很不喜欢扁⼈,更不喜欢被⼈扁)。我需要发泄,我⽤⼿指拼命的敲打着键盘,在⼀阵接⼀阵有节奏的声⾳中,屏幕上出现了上⾯的这些⽂字。可难道这就是发泄的另⼀种⽅式吗?中国⼈还是厉害,早在⼏千年前孔⽼夫⼦就说过"唯⼥⼦与⼩⼈,难养也",真**有先见之明,佩服!
虽然是在发泄,不过⼤家请放⼼,以我的脾⽓,既然决定写这篇教程,就⼀定会尽⼒去写好,写完美,绝对不给⾃⼰留下遗憾,要不这教程就不是我写的!
曾经有⼀篇经典的批处理教程出现在你的屏幕上,你没有保存,直到找不到它的链接你才后悔莫及,⼈世间最⼤的痛苦莫过于此。如果上天能给你⼀个再看⼀次的机会,你会对那篇教程说三个字:我爱你!如果⾮要给这份爱加上⼀个期限,你希望是100年。因为100年后,你恐怕早已经挂了!⽽现在,你的屏幕上出现了这篇你正在看的批处理教程,虽然不如你曾经看的那篇经典,但如果勉强还过的去。你会爱它吗?时间会有50年那么长吗?答案是:试试看吧。
批处理脚本中最重要的⼏个命令,将在这⼀章详细介绍,但是很遗憾,有些细节到现在我都没掌握的很好,甚⾄还有些⽣分。如同还不太懂得爱⼀样。但我⼀直都在努⼒,即使⼀直都没有收获。所以可能讲的会⽐较笼统,但我会告诉你⽅法,剩下的就是时间问题了,需要⾃⼰去磨练。让我们共同努⼒吧。冰冻三尺⾮⼀⽇之寒,滴⽔穿⽯⾮⼀⽇之功。有些事情,⽐如学批处理,⽐如爱⼀个⼈,都是不能速成的,甚⾄还会有付出艰⾟⽽收获为甚微的情况。再次重申,看这篇教程的时候,⼀定要静下⼼来,除⾮你已经掌握了这篇教程的所有东西----但那也就不必看了,浪费时间!
7、if
接上⼀章,接着讲if命令。总的来说,if命令是⼀个表⽰判断的命令,根据得出的每⼀个结果,它都可
lnbf以对应⼀个相应的操作。关于它的三种⽤法,在这⾥分开讲。
(1)、输⼊判断。还是⽤例五⾥⾯的那⼏句吧:
if "%1"=="" goto usage
sculpture什么意思
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来表⽰否定⽽已。