Board logo

标题: [推荐]曾经在电脑爱好者发过的 <从零学批处理> [打印本页]

作者: jlygq1968     时间: 2007-6-4 21:45    标题: [推荐]曾经在电脑爱好者发过的 <从零学批处理>

从零开始学习批处理(下)。







三、高级批处理命令:


认识了批处理中常用的命令,如果读者认为批处理就这些内容的话,那就大错特错了。批处理还有功能更特殊用法更精妙的命令,还有更强大的功能和潜力等待着我们去挖掘。高级命令分为组合命令、管道命令和重定向命令。

组合命令:&、&&、||

顾名思义,组合命令实际上是一个有意义的连接符,用来连接多条命令。将多条子命令用这种连接符连接起来放在一行去当作一个命令执行,这在批处理中是允许的,而且使用十分广泛。

11、&命令。

&命令是最简单的组合命令,它的作用是连接多条子命令,不管前面的命令是否执行成功,后面的命令都将按顺序依次执行完毕。用法为:COMMAND1 & COMMAND2 & COMMAND3……例八,08.bat:


[复制到剪切板] [ - ]CODE:
del a.tmp & echo All done! & pause


例八中的这句命令由三条子命令组成,它们依次执行,任何一个命令的执行结果都不影响其他子命令的执行。

12、&&命令。

&&命令也是用来连接多条子命令的,用法与&命令相同,不同之处在于,它在从前往后依次执行被它连接的几个子命令时会自动判断是否有子命令执行出错,一旦发现某个子命令执行出错,该子命令后面的全部命令都将被忽略。这样,将某些在特定条件下不必执行的命令用&&命令连接在它的条件后面,当条件不正确时就不执行后面的命令了。例九,09.bat:


[复制到剪切板] [ - ]CODE:
dir file://IP/www/user.mdb && copy file://IP/www/user.mdb e:\backup\user.mdb


先用dir命令查看远程主机上user.mdb文件是否存在,执行成功后(文件存在)就用copy命令复制到本地,否则不执行copy命令。

13、||命令。

||命令同样用来连接多条子命令,用法同前两种组合命令完全一样,但它的作用跟&&命令刚好相反,当多条子命令中只要有一个可以成功执行(&&命令是执行出错),后面的所有子命令将被忽略。例十,10.bat:


[复制到剪切板] [ - ]CODE:
dir 01.exe || dir 02.exe || echo No virus found! & pause
echo Found Virus! & goto clean

假设01.exe和02.exe是同一个病毒的两个文件,先用dir 01.exe命令检查文件01.exe是否存在,如果不存在(执行不成功)就继续执行dir 02.exe检查02.exe是否存在,如果存在01.exe就显示发现病毒,并跳转程序到清除病毒部分。


管道命令:|

管道命令用来实现将一个命令的输出信息和另一个命令的输入相连接,类似与从管道中传递实体。用户只能看到最后的结果而不能看到它们之间通信的过程,因为这个过程是在管道中进行的。在批处理中使用管道命令,可以让命令之间互相通信,而将中间过程透明化,因此作用十分巨大。

小知识:操作系统中把“管道”定义为连接一个读进程和一个写进程以实现它们之间通信的文件,这个“文件”是在内存中建立的,当信息传递结束后它也随之消失,所以是不可见的。

14、|命令。

|命令用来实现两个命令之间的管道,它将前一命令的输出作为后一命令的输入,这种用法比较特殊,但却很高效。可以分两步来理解|命令:先将前一命令执行后的结果输出到内存的某一地址,再让后一个命令从该地址来取输入信息。在这两步之间,这个被两个命令共同使用的内存就相当于管道。例十一,11.bat:


[复制到剪切板] [ - ]CODE:
type code.txt | debug


想将一个保存在code.txt中的代码让dubug程序来执行,不必先打开debug,再将code.txt的内容粘贴在里面后执行,只需要利用这个管道命令就可以实现。先用type命令在内存中显示code.txt的内容(type命令的输出),然后将这些输出作为debug的输入内容传递给debug。

重定向命令:>和>>、<、>&和<&

15、>和>>命令。
>和>>命令又被称为输出重定向命令,它们的作用是一样的,都是将前一命令的输出写到一个文件中。在批处理中,它们往往被用来将某些信息保存到一个文件中。例十二,12.bat:


[复制到剪切板] [ - ]CODE:
dir /s e:\ > a.txt

这条命令用来得到一份E盘的目录和详细文件列表,并保存到a.txt文件中。先用dir/s命令将E盘的目录列出来(在内存中),然后用>重定向命令将该部分内存的内容写到a.txt中。>命令写文件的方式是从文件第一行开始,直到写完管道中的内容,原来文件的起始部分将被覆盖。所以如果要在同一个文件中再写进去F盘的详细文件列表,就要使用>>命令了,因为>>命令是从文件在最后一行,将管道中的信息追加进去的。例十三,13.bat:


[复制到剪切板] [ - ]CODE:
dir /s e:\ > a.txt
dir /s f:\ >> a.txt

可见,>命令和>>命令的不同之处在于前者是从文件的第一行开始覆盖,而后者是从文件的最后一行开始追加。

16、<、<&和>&命令。

这三个命令一般不常用,本文只作简单介绍,有兴趣的读者可以通过其他途径深入学习:

<,输入重定向命令,从文件中读入命令输入,而不是从键盘中读入。
>&,将一个句柄的输出写入到另一个句柄的输入中。
<&,刚好和>&相反,从一个句柄读取输入并将其写入到另一个句柄输出中。

应用在批处理中的所有命令基本上都在前面介绍了,但光依靠这些命令还不足以让批处理发挥其所有的功能。批处理在执行时还可以被加进去参数,还可以利用批处理来操作注册表……

四、批处理的综合应用:

批处理参数的应用:

参数在批处理中的应用十分广泛,很多情况下如果不使用参数,其功能将无法完成。参数中,%0表示该批处理文件名,相当于对该批处理自身的一次调用;%1-%9表示在执行时用加入的参数代替。如果参数多于9个,则需要使用shift命令来处理多出的参数。例十四,14.bat:


[复制到剪切板] [ - ]CODE:
@echo off
net use \\%1\ipc$ "%3" /u:"%2"
goto result%errorlevel%
:result0
echo host=%1
echo username=%2
echo username=%3
pause
:result2


假设该批处理文件名为ipc.bat,则执行时在命令行输入ipc 192.168.0.123 administrator password,批处理会自动将

批处理操作注册表:


一般情况下,操作注册表的方法是直接打开注册表编辑器对其操作,还有一种是利用导入的方法来操作注册表,将要编辑的注册表内容写到一个文件中,然后将该文件执行导入内容。使用批处理也可以对注册表进行操作,利用的原理就是导入。

注意:注册表包含了计算机中每个用户的配置文件、有关系统硬件的信息、安装的程序及属性设置,Windows 在其运行中不断引用这些信息。在操作注册表前最好先对其进行备份,以免因操作不当造成难以预测的后果。

结合管道命令>和echo命令就可以将注册表内容写到一个文件中,最后利用regedit命令导入就可以了。例十四:


[复制到剪切板] [ - ]CODE:
@echo off
rem This REGfile close all shared entity.
echo Windows Registry Editor Version 5.00 > name.reg
echo. >>name.reg
echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters] >> name.reg
echo "AutoShareServer"=dword:00000000 >> name.reg
echo "AutoShareWks"=dword:00000000 >> name.reg
echo.
regedit /s

该例的作用,是通过修改注册表来达到禁止默认共享的目的。在该例中,使用echo命令显示一个字符串,然后用>命令将此字符串重定向到name.reg文件中,最后利用regedit命令将name.reg文件的内容写到注册表里。如果为Windows98系统,则.reg文件的第一行应修改为REGEDIT4,顶格大写。

注意:echo命令后不空格而紧跟一个小圆点,作用是显示一个空行,且显示空行的前提是必须执行过echo off命令。.reg文件第二行和最后一行的两个空行必须存在,它是注册表文件的固定格式。

批处理综合应用举例:

在介绍了批处理中使用的所有命令后,下面将以更多的例子来向大家展示批处理的综合应用。

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

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


[复制到剪切板] [ - ]CODE:
@echo off
echo Windows Registry Editor Version 5.00 >> fixie.reg
echo. >> fixie.reg
echo [HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main] >> fixie.reg
echo "Windows Title"="Microsoft Internet Explorer" >> fixie.reg
echo "Start Page"="about:blank" >> fixie.reg
echo. >> fixie.reg
echo [HKEY_CURRENT_USER\Software\Policies\Microsoft\Internet Explorer\Control 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


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

面对日益猖獗的病毒,很多菜鸟都叫苦不迭,不知道如何应对。其实利用批处理,完全可以达到自动搜索、分析和清除病毒的目的。
该工具分为三部分。备份:先将sysrem32目录的所有.exe文件和.dll文件的详细信息写到一个备份中,系统每次启动时都自动将当前情况和备份文件对比;搜索与分析部分:具备可扩展性,用户可以随时添加新的“病毒库”进去,同时根据病毒的资料,使用call命令调用清除部分。各种病毒的详细资料可以从Internet上得到。
备份:此过程在系统确定无病毒时进行。保存为Backup.bat。


[复制到剪切板] [ - ]CODE:
@echo off
dir c:\windows\system32\*.exe > c:\exe_0.txt
dir c:\windows\system32\*.dll > c:\dll_0.txt

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


[复制到剪切板] [ - ]CODE:
@echo off
dir c:\windows\system32\*.dll >c:\exe_1.txt
dir c:\windows\system32\*.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

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


[复制到剪切板] [ - ]CODE:
@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

精彩实例三:打造自己的弱口令扫描器。

密码和协议,这是网络安全最根本的两个因素。而在密码漏洞中,最常见的是弱口令,它一直是阻碍网络安全的绊脚石。利用批处理就可以实现弱口令扫描,将网络中存在弱口令的机器找出来并保存其IP、用户名和密码。
该扫描器共有如下文件:ip.txt、psw.txt、user.txt、result.txt、ip.bat、psw.bat、user.bat、ipc.bat 8个文件组成,它利用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中取用密码。


[复制到剪切板] [ - ]CODE:
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中。


[复制到剪切板] [ - ]CODE:
@echo off
net use \\%1\ipc$ %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 \\%1\ipc$ /delete
:result2

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


引用
2004-09-04 星期六
18:46
Result:

RemoteIP:192.168.0.7
Username:administrator
Password:iloveu

五、将批处理转化为.com可执行文件:

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

小知识:在DOS环境下,可执行文件的优先级由高到低依次为.com>.exe>.bat>.cmd,即如果在同一目录下存在文件名相同的这四类文件,当只键入文件名时,DOS执行的是name.com,如果需要执行其他三个文件,则必须指定文件的全名,如name.bat。

这是一个只有5.43K大小的免费绿色工具,可以运行在纯DOS或DOS窗口的命令行中,用法:Bat2Com
FileName,这样就会在同一目录下生成一个名为FileNme.com的可执行文件,执行的效果和原来的.bat文件一样。例十五:



@echo off
echo MM,do you love me ?
:love
choice
Yes or No?
if errorlevel 2 goto love
pause

给这个批处理稍加修饰,就是一个简单版的“非爱不可”,只有当选择Yes的时候才可以退出,否则就无限循环。将love.bat和Bat2Com.exe放在同一目录,然后执行bat2com love.bat,立刻就在该目录下生成一个love.com的可执行文件。如下图:




image002.gif (6.8 KB)
2007-5-25 13:45


小提示:choice是一个Windows98下的外部命令,如果需要在没有该命令的Windows系统中使用该命令,可以直接将Windows98系统下%systemroot%\command\choice.com文件复制到其他Windows系统的%systemroot%目录即可。如果将含有choice命令的批处理文件用Bat2Com处理成.com文件,则生成的.com文件可以脱离choice.com而成功运行,因为choice的功能已经被写到该.com文件中去了。
07-05-25补充:当然也可以用set、if和goto命令结合来判断用户的输入,以达到目的。

六、后记:

本文通过使用大量的例子,比较系统、全面、正确的介绍了批处理的来历、用法、命令、综合应用等方面,也许作为初学者,你已经对批处理有了非常浓厚的兴趣,但批处理如同其他程序语言一样(只不过比较简陋),是一门博大精深的艺术,要彻底掌握批处理必须要有非常扎实的DOS基础和非常灵活的头脑。批处理是玩出来的,练出来的,它还有更大的潜力等待你的挖掘。只要你不断努力,老树也可以开新花。
作者: tianqing     时间: 2007-6-8 19:28
不错,收了,好东西就应该大家分享,谢谢楼主提供。
作者: ken123888     时间: 2007-6-8 20:54
定义病毒特征库的工作量太大了
作者: ldr2zjj     时间: 2007-6-9 03:48
又有收获了`~~谢谢~~最后一个好像不行`~~~我没转成COM~~直接执行这个批处理`~出现错误~~YES/NO不是外部,内部命令`~
作者: lasting     时间: 2007-6-9 06:01
好东西先记录了...