当前位置:文档之家› DOS高手速成秘籍——批处理编程命令实例秀

DOS高手速成秘籍——批处理编程命令实例秀

引言:如今Windows大行其道,但DOS批处理就像一只娇艳的小花,虽然不起眼,却总是悠悠地散发着让人难以抗拒的魅力,相信你曾经多次通过我们的杂志中体会到了批处理的美妙,但那些其实只是批处理的基本应用,DOS批处理中还有一些神秘的编程命令,通过它们你可以轻松实现在Windows中要数个步骤、几十个步骤才能完成的任务,甚至是一些要付出Money才能享用的软件的功能。今天就让我们一起来揭开它们的神秘面纱,通过众多有趣、有用的实例学习如何使用批处理中的编程命令,在短短几个小时内从一只小菜鸟成就为一名批处理大师。

温故:操练基本的批处理

★2003年第21期《回归Windows的黑白森林——用命令行DIY你的工具软件》

木马速查器、卸载软件后的垃圾清理工具、多分区文件列表工具、文件上传和删除工具、多任务快速搜索器、文件目录“搬家”工具……

★2004年第期《节省系统资源新方案——上网一键通,下线一键关》

一键上网并打开相关网络程序,一键下键并关闭不需要的网络程序

★2004年第16期《剿匪大行动全歼Windows另类垃圾》

超强的Windows垃圾自动清理器,让电脑永远没有垃圾

一、编写第一个作品:文件列表器

打开记事本,按照图1所示输入其中命令,完成后将其保存为file.bat,并放置到你的个人数据文件夹(比如:D:\data)中,运行这个批处理文件后,会自动生成一个名为list.txt的文件,里面有所有TXT、DOC、XLS 文件的详细列表。

小提示

玩批处理的要点

★在批处理运行中,只要按Ctrl+C或Ctrl+BackSprce组合键就可以结束它,请牢记这两个组合键,因为当你做出一个死循环批处理后,它们是你的“救命稻草”。

★写批处理时最好在开始写上注释文字,从而让自己和别人都知道这个批处理的作用。

★凡是命令中有FORMAT、DEL之类格式化、删除命令,最好特别小心,如果书写错误,很可能会将你的重要数据删除。

★文章中许多实例都涉及到了带%的变量,如果直接在DOS窗口中运行,那么只要输入一个“%”,如果写在批处理文件中,那么就得将其变成“%%”。

二、快速初识批处理

批处理是DOS 1.0开发到最后时刻才诞生的,IBM告诉微软,他们需要用一些方法来一次又一次测试生产出来的PC,所以希望能够有一种方式使电脑自动运行一批命令,而不用人工一次次输入,于是微软就通过建立批处理文件来实现这个意图。

在后来出现的DOS操作系统里,这种自动化被更好地体现出来。DOS系统允许用户使用任何一种文本编辑器将多条DOS命令按某种顺序以ASCⅡ文本形式写入一个扩展名为BAT(MS-DOS批处理)或

CMD(Windows NT命令脚本)的文件中,当在命令提示符下键入文件名并回车,或在Windows环境中双击该文件时,系统会调用https://www.doczj.com/doc/bb9333030.html,或cmd.exe由前向后依次来自动执行这些命令。这个命令集合就是批处理,它是DOS下可执行文件的一种。一个完整的批处理由至少一条可以被正确执行的DOS命令组成,可见DOS命令是批处理的核心。

也有一种说法,把批处理称做“脚本”,或合起来称为“批处理脚本”,这也是合理的。批处理和脚本有一个共同点,它们都是通过一组命令的正确执行来实现自身价值,不同之处在于,批处理使用的全部为DOS命令,而在脚本中可以使用应用程序的指令;脚本程序性强于批处理,批处理程序结构比较简单。

Just Do It

在运行刚才制作的批处理文件时,你会发现,每次运行后,list.txt中都会重复添加已有的文件列表,这样在实际使用时会比较麻烦,请将其修改一下:

::文件列表器

::可以将文件夹中的个人数据文件(比如:TXT、DOC、XLS等文件)写入列表文件中。

@echo off

if exist list.txt del list.txt

FOR /R %%C IN (*.TXT *.DOC *.XLS) DO echo %%~fnC >>list.txt

这样你会发现,每次的list.txt都是最新的文件列表,而且运行时出来的命令执行情况显示也没有了。

小提示

请教Windows中的黑脸老师

DOS命令并不像Windows程序那样直观,它往往要配合许多参数和固定的书写方法才能发挥作用,除了请教身边高手或是在网上求助外,建议最好事先问问Windows中的黑脸老师,打开命令行提示符,输入“命令/?”,回车后,详细的答案就会全部列出来(见图2)。另外,对于Windows 2000/XP,也可以试试白脸老师——“帮助”,打开后,在“搜索”选项卡中输入命令,回车后即可找到结果,内容和黑脸老师讲的都一样。

三、掌握批处理的基本编程命令

1.@命令

“@”符号是E-mail的专用符号,它在批处理中的作用是让系统在执行批处理命令时不显示该行命令本身。也就是如果你把它放在一行命令的前面(比如:@if exit list.txt del list.txt),那么这行命令在执行过程中就不会显示了。但如果每行都加上这个命令,不仅费事,而且有些多余,因此它常常和后面的“echo off”配合使用。

2.echo命令

其主要作用是来确定批处理在执行时显示或不显示它后面所有命令本身,而只显示执行后的结果或其他信

息,一般出现在批处理第一行,“echo”和“@”命令的区别在于前者关闭了所有命令显示,而后者只关闭其中一条。而“echo on”显示命令执行已经很少有人用了。

在批处理文件中,“@echo off”这个组合使用非常频繁,它达到了两个目的:“@”使“echo off”命令不显示,而“echo off”确保了后面每行命令的执行过程都不显示。

小提示

“echo”命令还有其他特别用法,比如用来在批处理执行过程中显示一段信息,用法为“echo [消息内容]”,这样“echo”后面的所有内容将被显示到屏幕上。

另外,这个命令还可以结合管道命令将显示信息写进某个文件,比如前面实例中的“echo %%~fnC >>list.txt”。

3.::和rem命令

::和rem命令的作用和用法都完全一样,用来在批处理中做注释,增加程序可读性,这是一个值得提倡的好习惯。它们后面跟随的语句不会在执行时显示或被执行。

4.pause命令

该命令在批处理中使用十分广泛,其作用是暂停批处理的执行,直到用户按下键盘上的任意键(Break键除外)。批处理在执行过程中显示的所有信息都是一闪而过的,只有当用户暂停执行时,才能看到当前屏幕上的信息。当程序要让用户看一段信息,或要给用户时间去考虑某个问题时,就可以在这里加上一个pause,批处理执行到这里时将显示“按任意键继续”的信息。用法很简单,直接在要暂停的地方使用pause命令即可。

入门实例:复制多张软盘

打开记事本,输入以下语句,并将其保存为copya.bat:

@echo off

:begin

copy a:\*.* d:\back

echo Please put a new disk into driver A

pause

goto begin

每当复制完一张软盘后,会提示插入一张新软盘,并停止运行,在插入新软盘后,按任意键就能继续执行复制操作。

5.call命令

该命令是用来从一个批处理中调用另一个批处理的,用法为:CALL [驱动器][路径]批处理名[参数]。使用此命令,可以实现多个批处理互相调用,类似于程序中各个模块之间的互相调用。在后面实例中,你可以亲自体验一下这个命令。

6.:和goto命令

这是两个成对出现的命令,在任何一个批处理中有多少个“:”就一定至少有多少个“goto”。“goto”命令的作用,是告诉程序并不按顺序向下执行,而是要跳转到另一个地方,而“:”命令则惟一标记了“goto”命令要跳转的地址。简单说,“goto”是个跳转命令,而“:”是一个标签。当批处理运行到“goto”时,将自动跳转到“:”所标记的地方去执行。

小提示

“goto”命令的标签长度不能超过8个字节,否则可能会出错,比如“thistest0”和“thistest”的效果是一样的,批处理只取前8个字节,即“thistest”。

四、批处理命令的精髓:if和for

if和for是批处理中的复杂编程命令,它们本身比较难掌握,但功能强大,在批处理中应用十分广泛,是批处理中各种重要功能实现的基础。熟练掌握这些命令才可以让写出的批处理实现想要的功能。

1.if命令

懂得编程的朋友都知道,“if”命令在各种程序中都有使用,而且用得十分普遍。在批处理中,“if”命令和其他程序语言中的作用基本一样,都是代表“如果……就……”,是一个选择判断命令,或者说条件命令。在批处理中,“if”命令的使用也十分普遍,凡是牵扯到分支结构的地方都要使用该命令。

if命令一点通

if命令判断程序执行时条件是否满足,如果满足就执行一个操作,不满足就执行另一种操作,条件可以是单个,也可以是多个的。根据if命令判断的对象,可将其分为三类:

输入判断:IF [NOT] 参数==字符串 command

存在判断:IF [NOT] EXIST filename command

结果判断:IF [NOT] ERRORLEVEL number command

说明:也可以在if后面仅跟一个not来判断“如果不……就……”,用法跟“如果……就……”的用法一样,本文不另做介绍。

入门实例1:解读Ghost自动备份和恢复系统

学习重点:if命令的“输入判断”。

实现功能:通过对Config.sys和Autoexec.bat文件的编辑,可以让你轻松实现Ghost自动备份和恢复系统的功能。

在第18期《玩转Ghost 重装系统不求人》中我们介绍了如何打造Ghost自动备份和恢复系统,而它恰恰使用了if命令的输入判断,现在我们来解读一下:

在Config.sys文件中,首先使用[Menu]来显示下面的选择菜单:

1.Backup your system.

2.Restore from HD.

接着在Autoexec.bat文件中,写入了相应if语句:

其中“"%config%"”是参数,指Config.sys中设置的Menu,如果输入1,也那么就是选择[Menu]下的“Clone,Backup your system.”(“,”后面为显示文字,你可以随意修改,比如改为“bei fen wo de Windows”)。语句翻译:这段if语句如果翻译成日常用语,应该是:

如果你按下1键,也就是选择了Clone(菜单显示的“Backup your system.”),那么会直接进入“Clone”部分,并执行其下的Ghost命令来备份系统。

如果你按下2键,也就是选择了RestoreHD(菜单显示的“Restore from HD.”),那么会直接进入“RestoreHD”部分,执行其下的Ghost命令来恢复系统。

Just Do It

请在显示的菜单中添加“back to DOS”,选择后自动返回DOS。

★在Config.sys文件的[Menu]下应添加:

menuitem=NO, back to DOS.

并在下面适当位置添加以下命令:

[NO]

device=himem.sys /testmem:off

★在Autoexec.bat文件中添加以下语句:

IF "%config%"=="NO" GOTO QUIT

在下面适当位置添加:

:QUIT

echo To get help, type HELP and press ENTER.

echo.

rem clean up environment variables

set CDROM=

set LglDrv=

入门实例2:文件自动分类保存

学习重点:if命令的存在判断

实现功能:对于平时整理个人数据非常有帮助,能够自动将同一类文件复制到特定文件夹中。

请在D盘新建data目录,接着再新建txt子目录。

::文件自动分类

::让文本文件自动移动到TXT文件夹

if exist *.txt move *.txt D:\data\txt

保存为movetxt.bat,放在D:\data文件夹中,复制包含TXT文件在内的一些文件到这个文件夹中,接着运行这个批处理,你会发现所有TXT会自动移动到TXT子文件夹中。

语句翻译:如果当前文件夹中存在TXT文件,将它们全部移动到D:\data\txt文件夹中。

Just Do It

扩展这个批处理文件,使其能自动将DOC文件移动到WORD文件夹,XLS文件移动到Excel文件夹。

小提示

if命令的存在判断不能用来判断一个目录是否存在,只能判断文件,但在每个目录下都存在空设备,因此可以使用判断空设备是否存在的方式来间接判断目录是否存在。方法为:IF [NOT] EXIST

[drive:][path]\nul command。例如:if not exist e:\tools\con md e:\tools,如果不存在e:\tools这个目录就新建立一个。

进阶实例1:冰河木马检查器

打开“记事本”,输入以下命令,将其保存为binghe.bat(语句中的①、②、③不用输入):

@echo off

netstat -a -n > a.txt①

find a.txt "7626"②

if errorlevel 2 (

echo You have infected GLACIER!

) else (

echo Congratulations! No GLACIER!③

)

del a.txt & pause

运行后,如果显示“You have infected GLACIER!”,说明你中了冰河,需要使用相关工具进行清查,如果显示“Congratulations! No GLACIER!”则说明没有问题。并且自动删除生成的a.txt文件。

语句翻译:这里使用了if命令的结果判读,它是if命令三种判断中最重要的一种。由于DOS命令在执行完毕后都会给系统一个返回值,用来表示执行结果。在if命令中设置一个比较值,如果返回值大于或等于比较值就继续执行,否则就退出if命令。

①显示出你的电脑当前所开放的所有端口及所有已建立的有效连接,并输出到式a.txt文件中)

②在a.txt文件中用“7626”作为关键词查找,因为冰河会打开多个7626端口

③如果检查结果等于或大于2,表示find命令找到特定字符串,就会执行第一个echo命令,否则就执行else后面的echo命令。

2.for命令

for命令是批处理中最具程序特点、也是最强大的命令之一,它是一个循环命令,用来对多个目标执行同一个操作,通常情况下是对一个或一组文件中的每一个对象进行定义的操作,直到所有对象都执行这一操作完成,或被强制终止。

特别提醒:在下面的实例操作中,请特别体会和注意for语句的循环操作,也就是一个接一个执行。

for命令一点通

基本用法:for %variable in (set) do command

简明实例:for %a in (*.tmp) do del %a

快速翻译:“%a”表示变量,它是由(*.tmp)来进行定义的,在这里变量就是所有TMP文件,而“do”(做)后面是删除操作。整体翻译过来就是,首先告诉for命令“%a”变量就等于所有TMP文件,后面只要一说“%a”就是说所有TMP文件,接下来就是一个接一个地删除TMP文件,直到删除完为止。

特别说明:“in”和“do”为该命令中必不可少的关键字;变量可以使用除%0~%9以外的所有数字和字母,例

如%i,但变量有大小写之分,%i不等于%I;另外,如果直接在DOS窗口中运行for命令,那么变量前只要一个%符号即可,如果写成批处理文件,那么就得加两个%符号,否则会提示出错。如%%i。

小知识

什么是变量?

变量在编程中经常被用到,因为它不是固定的,而是根据用户的设置或输入内容不断变化着,所以叫变量。在for命令中,它会根据后面(set)中定义的内容而变化。举个通俗的比喻,变量就像是火车上的座位,它并不属于任何人,如果你一旦坐在某个座位上(比如1号),那么在你下车前,这个座位便和你联系在一起了,大家一叫1号座位的同志,也就是在叫你。但当你下车后,1号座位便和你没有联系了。

根据在(set)部分定义的操作对象的不同,可将for命令作用分为四类:目录操作(/d)、目录树操作(/r)、数值范围操作(/l)、文件解析(/f)。下面通过几个精彩实例切实来体会它们。

入门实例1:快速清理你的桌面

学习重点:初步了解for命令的妙用

实现功能:许多朋友经常会把一些个人文件放置在桌面上,比如文本文件、Word文件、下载的软件等,这样造成桌面非常混乱,而下面制作的批处理文件,能自动将它们分类移动到D盘DATA文件夹下的TXT、WORD、DOWNLOAD子文件夹中,对于在桌面子文件夹中的文件,则不会移动。

::快速清理桌面

@echo off

for %%a in (*.txt) do move "%%a" D:\data\TXT

for %%b in (*.doc) do move "%%b" D:\data\WORD

for %%c in (*.exe) do move "%%c" D:\data\DOWNLOAD

for %%d in (*.zip) do move "%%d" D:\data\DOWNLOAD

语句翻译:首先设置了四个变量,并且分别表示所有TXT、DOC、EXE、ZIP文件,接着将所在文件夹中四种类型文件一个接一个地移动到D:\data相应子文件夹。

Just Do It

★将这个批处理文件直接放置在经常保存个人数据的文件夹中,从而可以实现快速整理个人数据文件。

★如果还想将桌面子文件夹中的文件也一并移动,请在for后面加上“/r”参数。

入门实例2:快速在当前文件创建子文件夹

学习重点:“/d”参数,它表示只针对定义范围的目录进行操作,也就是批处理文件放置在什么目录,就只针对这个目录操作。

实现功能:将这个批处理文件放置在任意文件夹中并运行,就会自动创建文件名为data、download、game 的子文件夹。

::快速创建文件夹

@echo off

for /d %%i in (data,download,game) do md %%i

语句翻译:设置变量为%i(因为写在批处理文件中,所以要写为%%i),操作的目标分别为data、download、game,而“do”后面指定的操作是“md”(创建目录),所以就是创建名为data、download、game的子目录。入门实例3:在每个文件夹中添加同一个文件

学习重点:“/r”参数,处理所有子文件夹。

实现功能:有时在制作光盘时,为了便于别人了解相关信息,比如你的网站、统一的压缩密码等,希望在每个文件夹中添加一个说明文件,这个批处理可以自动将C:\readme.txt文件复制到每个子文件夹中。

::在每个文件夹中复制C:\readme.txt文件

@echo off

for /r %%a in (.) do copy C:\readme.txt %%a

语句翻译:设置变量“%a”为所有子文件夹,接着将C:\readme.txt文件一一复制到当前目录的所有子文件夹中。

入门实例4:在文件中自动输入100~999的数字

学习重点:“/l”参数,数值范围操作。

实现功能:在一个文本文件中自动按递增顺序输入100~999数字,每行一个数字。

::在文件中自动输入数字

@echo off

for /l %%i in (100,1,999) do echo %%i >> number.txt

if errorlevel 0 echo All done.

语句翻译:“(100,1,999)”表示数字序列的最小值为100,最大值为999,而1表示生成序列的方式为递增,如果是-1则代表递减。如果将(set)中的100和999互换位置,会将100到999之间的数按递减顺序排列并写到number.txt文件中。最后一句的意思是,如果生成无误,就显示“All done.”。

入门实例5:获取局域网中所有IP地址与主机名列表

学习重点:“/l”参数,数值范围操作。

实现功能:如果你是网管,肯定需要获取一张本网段内所有IP地址与计算名的对照表。用for命令可以轻松实现,本例可以将这个表直接保存到C:\adress.txt文件中。

::获得IP地址和计算名对照表

@echo off

for /L %i in (0,1,254) DO ping -a -n 1 192.168..0.%i |Find /i "reply" >>C:\adress.txt

语句翻译:“%i”变量指从0开始,每次增加1,直到254结束。“-a”表示获取主机名;“-n -1”表示回显的次数为1次,默认情况下为4次;Find /i "reply“表示查找已响应的主机,即已ping通的主机;“c:\adress.txt”表示将屏幕显示内容输入指定文件中。

入门实例6:将一个文件中不为空的文字写入另一个文件

学习重点:“/f”参数,用来对定义范围内的文件内容、字符串以及其他命令输出进行处理。

实现功能:要将01.txt文件中的所有空行去掉,并保存为02.txt文件。

直接在命令提示符中执行如下命令:

for /f %i in (01.txt) do echo %i >> 02.txt

语句翻译:这样就会将01.txt内容中不为空的所有行写入到02.txt文件中,因为“/f”参数默认不处理文件中的空行。在该操作中,可以为/f参数再带上更多选项来实现更丰富的功能。在选项中可以定义被处理文件的其他条件,例如从第n行开始处理、行结尾如果是指定字符就跳过、指定每行的第那些字符被参数取代等。进阶实例1:自动删除空目录

::删除空目录

@echo off

for /l %%a in (1,1,5) do for /r %%i in (.) do rd %%~si

小提示

如果目录很深,超过了五层,请修改“(1,1,5)”中的最大值,也就是“5”,比如:“8”。而“rd”为删除空目录命令,在这里你要特别注意for命令的循环执行,然后理解这个实例是如何一层一层删除空目录的。

进阶实例2:将文件保存到以文件名命令的文件夹中

有时在自己的网站中提供软件下载(或者刻录成光盘),希望每个软件(默认已经为单独的安装包或压缩包,比如WinRAR.exe、FlashGet.rar等)放置在以软件名命令的文件夹中,然后再使用WinRAR批量打包成单独的RAR。

::将每个文件自动存在到以文件名命令的文件夹中

@echo off

for %%a in (*.*) do mkdir "%%~na"

for %%a in (*.*) do move %%a "%%~na"

将这批处理放置到存放软件的目录,双击运行后,所有软件都自动保存到以软件名命名的文件夹。

Just Do It

还记得前面的“call”命令吗?赶快试一下吧,用它来调用前面“在每个文件夹中添加同一个文件”实例中的批处理文件,从而再进一步,在每个软件的文件夹中都保存有你的说明文字。

进阶实例3:批量生成001.TXT、002.TXT…999.TXT,文本内容分别为TEXT001、TEXT002

@echo off

for /l %%a in (1,1,9) do @echo text00%%a >00%%a.txt

for /l %%a in (10,1,99) do @echo text0%%a >0%%a.txt

for /l %%a in (100,1,999) do @echo text%%a >%%a.txt

进阶实例4:给文本文件批量加上落款

在写作文章时,一般都要在文章末尾加上类似“通信地址、QQ、E-mail”等信息的落款,使用这个实例则可以帮你将指定目录中所有文本文件都加上落款。

假设要给放在“D:\data”目录下所有文本文件加上落款,首先,先创建一个名为Address.txt的文本文件,在其中输入你的通信地址、QQ、E-mail等信息,直接保存在C盘根目录。

::给文本文件批量加上落款

@echo off

MD C:\TEMPdata

for /r D:\data %%I in (*.txt) do copy %%I+C:\address.txt C:\tempdata\

for /r c:\tempdata %%I in (*.txt) do copy %%I D:\data\

echo y|del C:\TEMPdata

echo y|rd C:\TEMPdata

进阶实例5:只保留TXT、RAR文件,删除其他类型文件

使用这个批处理,可以将某个文件夹中除TXT、RAR外的文件全部删除。

::只保留TXT、RAR文件

@echo off

for /f "delims=/" %i in ('dir /b/s *.*') do dir /b/s *.txt *.rar| find "%i" || del "%i"

五、批处理经典实例秀

精彩实例1:快速禁止Windows 2000/XP的默认共享

@echo off

rem This REGfile close all shared entity.

echo Windows Registry Editor Version 5.00 > name.reg

echo. >>name.reg

echo [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServiceslanmanserverparameters] >> name.reg echo "AutoShareServer"=dword:00000000 >> name.reg

echo "AutoShareWks"=dword:00000000 >> name.reg

echo.

regedit /s

小提示

echo命令后不空格而紧跟一个小圆点,作用是显示一个空行,且显示空行的前提是必须执行过echo off

命令。.reg文件第二行和最后一行的两个空行必须存在,它是注册表文件的固定格式。

精彩实例2:注册表IE选项快恢复!

很多恶意网站会偷偷修改用户的注册表,从而达到修改IE标题栏、首页等,甚至将IE首页选项变为灰色,而这个实例将以批处理导入注册表的形式解决这些问题。

@echo off

echo Windows Registry Editor Version 5.00 >> fixie.reg

echo. >> fixie.reg

echo [HKEY_CURRENT_USERSoftwareMicrosoftInternet ExplorerMain] >> fixie.reg

echo "Windows Title"="Microsoft Internet Explorer" >> fixie.reg

echo "Start Page"="about:blank" >> fixie.reg

echo. >> fixie.reg

echo [HKEY_CURRENT_USERSoftwarePoliciesMicrosoftInternet ExplorerControl Panel] >> fixie.reg echo "Settings"=dword:0 >> fixie.reg

echo "Links"=dword:0 >> fixie.reg

echo "SecAddSites"=dword:0 >> fixie.reg

echo. >> fixie.reg

regedit /s fixie.reg & del fixie.reg

精彩实例3:反病毒工具自己写

面对日益猖獗的病毒,很多菜鸟都叫苦不迭,不知道如何应对。其实利用批处理,完全可以达到自动搜索、分析和清除病毒的目的。

该工具分为三部分,备份:先将sysrem32目录所有EXE文件和DLL文件详细信息写到一个备份中,系统每次启动时都自动将当前情况和备份文件对比;搜索与分析部分:具备可扩展性,用户可以随时添加新的“病毒库”进去,同时根据病毒的资料,使用call命令调用清除部分。各种病毒详细资料可以从Internet上得到。

(1)备份:此过程在系统确定无病毒时进行,保存为Backup.bat。

@echo off

dir c:windowssystem32*.exe > c:exe_0.txt

dir c:windowssystem32*.dll > c:dll_0.txt

(2)搜索与分析:将该批处理加到开机启动项目中,每次开机自动检查。可检测的病毒种类具备扩展性,只需要添加更多的病毒信息即可。保存为Search.bat。

@echo off

dir c:windowssystem32*.dll >c:exe_1.txt

dir c:windowssystem32*.exe >c:dll_1.txt

fc c:exe_0.txt c:exe_1.txt >c:exe.txt

fc c:dll_0.txt c:dll_1.txt >c:dll.txt

find c:exe.txt "10.bat" && echo "发现批处理蠕虫病毒:姆码" && call muma.bat

find c:exe.txt "avserve.exe" && echo "发现蠕虫病毒:震荡波" && call sasser.bat

pause

(3)清除:每个病毒的清除代码放到一个批处理中。这里以“姆码”病毒为例,使用“流光”自带的DOS下进程结束工具pskill.exe来结束病毒程序的进程。保存为muma.bat。

@echo off

net user KKKKKKK /delete

net stop application

set win=%systemroot%system32

attrib -h -s *.bat & del %win%*.bat /F

if not errorlevel 0 goto echo

attrib -h -s HFind.exe & pskill HFind.exe & del %win%HFind.exe /F

if not errorlevel 0 goto echo

attrib -h -s ntservice.exe & pskill ntservice.exe & del %win%ntservice.exe /F

if not errorlevel 0 goto echo

attrib -h -s nwiz_.exe & pskill nwiz_.exe & del %win%nwiz_.exe /F

if not errorlevel 0 goto echo

attrib -h -s psexec.exe & pskill psexec.exe & del %win%psexec.exe /F

if not errorlevel 0 goto echo

attrib -h -s psexesvc.exe & pskill psexesvc.exe & del %win%psexesvc.exe /F

if not errorlevel 0 goto echo

attrib -h -s rep.exe & pskill rep.exe & del %win%rep.exe /F

if not errorlevel 0 goto echo

echo All done.

:echo

echo Delete failed! Please scan your system with Anti-virus tools!

pause

精彩实例4:打造弱口令扫描器

密码和协议,这是网络安全最根本的两个因素。而在密码漏洞中,最常见的是弱口令,它一直是阻碍网络安全的绊脚石。利用批处理就可以实现弱口令扫描,将网络中存在弱口令的机器找出来并保存其IP、用户名和密码。

该扫描器共有如下文件:ip.txt、psw.txt、user.txt、result.txt、ip.bat、psw.bat、user.bat、ipc.bat 八个文件组成,它利用for命令,从一个用户名字典和一个密码字典里依次取出一个用户名和密码来进行ipc$连接,一旦连接成功就记录IP、用户名和密码到一个指定文件中。

ip.txt:保存要扫描的IP地址,每行一个IP;

psw.txt:保存要测试的密码,每行一个密码;

user.txt:保存要测试的用户名,每行一个用户名;

result.txt:保存扫描结果。

ip.bat:在结果中保存日期和时间,并依次从user.txt中取用户名。

@echo off

date /t >> result.txt

time /t >> result.txt

echo result: >> result.txt

cmd /c for /f %%i in (user.txt) do call pass.bat %1 %2 %%i

psw.bat: 依次从psw.txt中取用密码。

cmd /c for /f %%i in (psw.txt) do call user.bat %1 %%i %3

user.bat: 依次从ip.txt中取IP地址。

cmd /c for /f %%i in (ip.txt) do call ipc.bat %%i %2 %3

ipc.bat:将取出的三个参数用net use命令进行IPC$连接,以确定IP、用户名以及密码是否正确。如果连接正确就将结果记录到result.txt中。

@echo off

net use \%1ipc$ %2 /u:%3

goto result%errorlevel%

:result0

echo. >> result.txt

echo RemoteIP:%1 >>result.txt

echo Username:%3 >>result.txt

echo Password:%2 >>result.txt

net use \%1ipc$ /delete

:result2

将这八个文件放到同一目录下,然后在命令行下这样执行:ip.bat ip.txt psw.txt user.txt。如果网速够快,用不了多久就会将所有IP、用户名和密码用排列组合的方式全部测试完毕(测试次数为IP数*用户名数*密码数),并将正确结果保存(见图6)。

精彩实例5:送MM一个非爱不可程序

(1)书写批处理

@echo off

echo MM,do you love me ?

:love

choice Yes or No?

if errorlevel 2 goto love

pause

将其保存为love.bat,这样一个简单版的“非爱不可”,只有当选择Yes时才可以退出,否则就无限循环。小提示

choice是一个Windows98下的外部命令,Windows 2000/XP已不再提供,你可以直接将Windows98中https://www.doczj.com/doc/bb9333030.html,文件复制到WINNT(或Windows)目录即可。

(2)将批处理转换为COM文件

由于批处理文件是一种文本文件,任何人都可以对其进行随便编辑,不小心就会把里面的命令破坏掉,将其转换成COM格式的可执行文件,不仅执行效率会大大提高,而且不会破坏原来的功能,更能将优先级提到最高。Bat2Com就能完成这个转换工作,其下载地址

为:https://www.doczj.com/doc/bb9333030.html,/soft1/200407/bat2com2exe.rar。

将love.bat和Bat2Com.exe放在同一目录,然后执行bat2com love.bat,立刻就在该目录下生成一个https://www.doczj.com/doc/bb9333030.html,的可执行文件。

作者的话:本文通过使用大量实例,比较系统、全面、正确地介绍了批处理的来历、用法、命令、综合应用等,也许作为初学者,你已经对批处理有了非常浓厚的兴趣,但它如同其他程序语言一样(只不过比较简陋)是一门博大精深的艺术,要彻底掌握批处理必须要有非常扎实的DOS基础和灵活的头脑。批处理是玩出来的,练出来的,它还有更大的潜力等待你挖掘。只要不断努力,老树一样可以开新花。

最后特别感谢网友HitMe,本文不少精彩批处理实例出自于他之手!

相关主题
文本预览
相关文档 最新文档