引言:如今Windows大行其道,但DOS批处理就像一只娇艳的小花,虽然不起眼,却总是悠悠地散发着让人难以抗拒的魅力,相信你曾经多次通过我们的杂志中体会到了批处理的美妙,但那些其实只是批处理的基本应用,DOS批处理中还有一些神秘的编程命令,通过它们你可以轻松实现在Windows中要数个步骤、几十个步骤才能完成的任务,甚至是一些要付出Money才能享用的软件的功能。今天就让我们一起来揭开它们的神秘面纱,通过众多有趣、有用的实例学习如何使用批处理中的编程命令,在短短几个小时内从一只小菜鸟成就为一名批处理大师。]!d.p6kB温故:操练基本的批处理2WF.ly+w2@_b0★2003年第21期《回归Windows的黑白森林——用命令行DIY你的工具软件》爱好者博墅Q:W5aWs8W`E木马速查器、卸载软件后的垃圾清理工具、多分区文件列表工具、文件上传和删除工具、多任务快速搜索器、文件目录“搬家”工具……}-k:_I`$K|+q0★2004年第期《节省系统资源新方案——上网一键通,下线一键关》uwC.kG@#z)If0一键上网并打开相关网络程序,一键下键并关闭不需要的网络程序爱好者博墅C(hAf&Gl★2004年第16期《剿匪大行动全歼Windows另类垃圾》爱好者博墅z9X-h9pn3wv超强的Windows垃圾自动清理器,让电脑永远没有垃圾一、编写第一个作品:文件列表器爱好者博墅qmZTjIq打开记事本,按照图1所示输入其中命令,完成后将其保存为file.bat,并放置到你的个人数据文件夹(比如:D:\data)中,运行这个批处理文件后,会自动生成一个名为list.txt的文件,里面有所有TXT、DOC、XLS文件的详细列表。2Wgb\ix0小提示%X+lCpwo'a4U0玩批处理的要点爱好者博墅]1c/o!V.wiy!g★在批处理运行中,只要按Ctrl+C或Ctrl+BackSprce组合键就可以结束它,请牢记这两个组合键,因为当你做出一个死循环批处理后,它们是你的“救命稻草”。G!J7l2]!Mi+yi0★写批处理时最好在开始写上注释文字,从而让自己和别人都知道这个批处理的作用。9_I`(OAC2p]S0★凡是命令中有FORMAT、DEL之类格式化、删除命令,最好特别小心,如果书写错误,很可能会将你的重要数据删除。爱好者博墅#m}+r-Spv$kA'xb★文章中许多实例都涉及到了带%的变量,如果直接在DOS窗口中运行,那么只要输入一个“%”,如果写在批处理文件中,那么就得将其变成“%%”。二、快速初识批处理[-KB7wo[0批处理是DOS1.0开发到最后时刻才诞生的,IBM告诉微软,他们需要用一些方法来一次又一次测试生产出来的PC,所以希望能够有一种方式使电脑自动运行一批命令,而不用人工一次次输入,于是微软就通过建立批处理文件来实现这个意图。爱好者博墅[)h8S5vr|$h)o5jH在后来出现的DOS操作系统里,这种自动化被更好地体现出来。DOS系统允许用户使用任何一种文本编辑器将多条DOS命令按某种顺序以ASCⅡ文本形式写入一个扩展名为BAT(MS-DOS批处理)或CMD(WindowsNT命令脚本)的文件中,当在命令提示符下键入文件名并回车,或在Windows环境中双击该文件时,系统会调用command.com或cmd.exe由前向后依次来自动执行这些命令。这个命令集合就是批处理,它是DOS下可执行文件的一种。一个完整的批处理由至少一条可以被正确执行的DOS命令组成,可见DOS命令是批处理的核心。Z&]+|,sk.[.X'j0也有一种说法,把批处理称做“脚本”,或合起来称为“批处理脚本”,这也是合理的。批处理和脚本有一个共同点,它们都是通过一组命令的正确执行来实现自身价值,不同之处在于,批处理使用的全部为DOS命令,而在脚本中可以使用应用程序的指令;脚本程序性强于批处理,批处理程序结构比较简单。C~k(j\\o0JustDoIt爱好者博墅XO-N2o5TRXve在运行刚才制作的批处理文件时,你会发现,每次运行后,list.txt中都会重复添加已有的文件列表,这样在实际使用时会比较麻烦,请将其修改一下:}4R(~rX0::文件列表器}+a;ac*[A@v0::可以将文件夹中的个人数据文件(比如:TXT、DOC、XLS等文件)写入列表文件中。爱好者博墅wcy3sd#btX@;Ib@echooff爱好者博墅WZW1j0\ifexistlist.txtdellist.txt爱好者博墅c+QJl|;XnbeFOR/R%%CIN(*.TXT*.DOC*.XLS)DOecho%%~fnClist.txt%K(QF1Yo0这样你会发现,每次的list.txt都是最新的文件列表,而且运行时出来的命令执行情况显示也没有了。小提示爱好者博墅(l(@+ql;k请教Windows中的黑脸老师爱好者博墅]sX*g#pbVDOS命令并不像Windows程序那样直观,它往往要配合许多参数和固定的书写方法才能发挥作用,除了请教身边高手或是在网上求助外,建议最好事先问问Windows中的黑脸老师,打开命令行提示符,输入“命令/?”,回车后,详细的答案就会全部列出来(见图2)。另外,对于Windows2000/XP,也可以试试白脸老师——“帮助”,打开后,在“搜索”选项卡中输入命令,回车后即可找到结果,内容和黑脸老师讲的都一样。三、掌握批处理的基本编程命令:xJd;L6Z|'UT;m;b01.@命令爱好者博墅/{a-sSDJhG3S“@”符号是E-mail的专用符号,它在批处理中的作用是让系统在执行批处理命令时不显示该行命令本身。也就是如果你把它放在一行命令的前面(比如:@ifexitlist.txtdellist.txt),那么这行命令在执行过程中就不会显示了。但如果每行都加上这个命令,不仅费事,而且有些多余,因此它常常和后面的“echooff”配合使用。+R6`u%hLP02.echo命令!rcNTm/K0其主要作用是来确定批处理在执行时显示或不显示它后面所有命令本身,而只显示执行后的结果或其他信息,一般出现在批处理第一行,“echo”和“@”命令的区别在于前者关闭了所有命令显示,而后者只关闭其中一条。而“echoon”显示命令执行已经很少有人用了。爱好者博墅ow8wb$X/p+y:v在批处理文件中,“@echooff”这个组合使用非常频繁,它达到了两个目的:“@”使“echooff”命令不显示,而“echooff”确保了后面每行命令的执行过程都不显示。爱好者博墅?Y+w!BO/]3bBc小提示Ng2t(T*r#o\e0“echo”命令还有其他特别用法,比如用来在批处理执行过程中显示一段信息,用法为“echo[消息内容]”,这样“echo”后面的所有内容将被显示到屏幕上。Dt+`_9K]l0另外,这个命令还可以结合管道命令将显示信息写进某个文件,比如前面实例中的“echo%%~fnClist.txt”。3.::和rem命令爱好者博墅,qY8RNm#Y&xq::和rem命令的作用和用法都完全一样,用来在批处理中做注释,增加程序可读性,这是一个值得提倡的好习惯。它们后面跟随的语句不会在执行时显示或被执行。爱好者博墅6sitl3Uvi+b/K4.pause命令6tWh~9h4T[\6v;}2zi0该命令在批处理中使用十分广泛,其作用是暂停批处理的执行,直到用户按下键盘上的任意键(Break键除外)。批处理在执行过程中显示的所有信息都是一闪而过的,只有当用户暂停执行时,才能看到当前屏幕上的信息。当程序要让用户看一段信息,或要给用户时间去考虑某个问题时,就可以在这里加上一个pause,批处理执行到这里时将显示“按任意键继续”的信息。用法很简单,直接在要暂停的地方使用pause命令即可。入门实例:复制多张软盘爱好者博墅&h/jf3xL(O3x/C!m-O打开记事本,输入以下语句,并将其保存为copya.bat:wKv,o1oD&\aw0@echooff爱好者博墅,_3nW?'e:begin爱好者博墅`(cg)O2ot$jAcopya:\*.*d:\back?2Vm-Mj6JO0echoPleaseputanewdiskintodriverA爱好者博墅4j-w9RQL5W2Iy-B@pause爱好者博墅7T1ETE0mjY#Rgotobegin爱好者博墅3X-dKZE每当复制完一张软盘后,会提示插入一张新软盘,并停止运行,在插入新软盘后,按任意键就能继续执行复制操作。+vl)McNm;T:a-c*d,m05.call命令6Gw(`m]0u_0该命令是用来从一个批处理中调用另一个批处理的,用法为:CALL[驱动器][路径]批处理名[参数]。使用此命令,可以实现多个批处理互相调用,类似于程序中各个模块之间的互相调用。在后面实例中,你可以亲自体验一下这个命令。c#w#rj-u`N06.:和goto命令爱好者博墅E.I&It/R这是两个成对出现的命令,在任何一个批处理中有多少个“:”就一定至少有多少个“goto”。“goto”命令的作用,是告诉程序并不按顺序向下执行,而是要跳转到另一个地方,而“:”命令则惟一标记了“goto”命令要跳转的地址。简单说,“goto”是个跳转命令,而“:”是一个标签。当批处理运行到“goto”时,将自动跳转到“:”所标记的地方去执行。爱好者博墅2E;Ozr3yYp小提示爱好者博墅KM9v&Q6eG7i?“goto”命令的标签长度不能超过8个字节,否则可能会出错,比如“thistest0”和“thistest”的效果是一样的,批处理只取前8个字节,即“thistest”。爱好者博墅O0}/C0N%Yw&~:i6j|四、批处理命令的精髓:if和for!a,hO(MzZ0if和for是批处理中的复杂编程命令,它们本身比较难掌握,但功能强大,在批处理中应用十分广泛,是批处理中各种重要功能实现的基础。熟练掌握这些命令才可以让写出的批处理实现想要的功能。爱好者博墅c*G~$|Q*SKd%LBzc1.if命令l\:T$u{Br1m0懂得编程的朋友都知道,“if”命令在各种程序中都有使用,而且用得十分普遍。在批处理中,“if”命令和其他程序语言中的作用基本一样,都是代表“如果……就……”,是一个选择判断命令,或者说条件命令。在批处理中,“if”命令的使用也十分普遍,凡是牵扯到分支结构的地方都要使用该命令。爱好者博墅(ziy*o6B]q-X7Rif命令一点通爱好者博墅9^IE3R*F;G~if命令判断程序执行时条件是否满足,如果满足就执行一个操作,不满足就执行另一种操作,条件可以是单个,也可以是多个的。根据if命令判断的对象,可将其分为三类:爱好者博墅E.xh#D1c|W5VD输入判断:IF[NOT]参数==字符串commandM|^xhF0存在判断:IF[NOT]EXISTfilenamecommandy_([.[A7T3oy*V6f0结果判断:IF[NOT]ERRORLEVELnumbercommand8I|wR3e,v0说明:也可以在if后面仅跟一个not来判断“如果不……就……”,用法跟“如果……就……”的用法一样,本文不另做介绍。入门实例1:解读Ghost自动备份和恢复系统爱好者博墅~&P\j-{Zhc学习重点:if命令的“输入判断”。爱好者博墅6[&o4hWxgd4M实现功能:通过对Config.sys和Autoexec.bat文件的编辑,可以让你轻松实现Ghost自动备份和恢复系统的功能。爱好者博墅N/K)KO%cy6dn(mG9Qa在第18期《玩转Ghost重装系统不求人》中我们介绍了如何打造Ghost自动备份和恢复系统,而它恰恰使用了if命令的输入判断,现在我们来解读一下:爱好者博墅,\GuV?|v!}2E在Config.sys文件中,首先使用[Menu]来显示下面的选择菜单:;QQ$p-lv01.Backupyoursystem.7TX4FP/]0e#O_02.RestorefromHD.nj%|3@_rD'Gkm6c0