引言.docx
《引言.docx》由会员分享,可在线阅读,更多相关《引言.docx(14页珍藏版)》请在冰豆网上搜索。
![引言.docx](https://file1.bdocx.com/fileroot1/2022-12/31/86f0d4e7-c24d-4dc6-b12c-3a8ea766f09a/86f0d4e7-c24d-4dc6-b12c-3a8ea766f09a1.gif)
引言
引言:
如今Windows大行其道,但DOS批处理就像一只娇艳的小花,虽然不起眼,却总是悠悠地散发着让人难以抗拒的魅力,相信你曾经多次通过我们的杂志中体会到了批处理的美妙,但那些其实只是批处理的基本应用,DOS批处理中还有一些神秘的编程命令,通过它们你可以轻松实现在Windows中要数个步骤、几十个步骤才能完成的任务,甚至是一些要付出Money才能享用的软件的功能。
今天就让我们一起来揭开它们的神秘面纱,通过众多有趣、有用的实例学习如何使用批处理中的编程命令,在短短几个小时内从一只小菜鸟成就为一名批处理大师。
]!
d.p6kB
温故:
操练基本的批处理
2WF.ly+w2@_b0★2003年第21期《回归Windows的黑白森林——用命令行DIY你的工具软件》爱好者博墅Q:
W5aW"s8W`E
木马速查器、卸载软件后的垃圾清理工具、多分区文件列表工具、文件上传和删除工具、多任务快速搜索器、文件目录“搬家”工具……
}k:
_I`$K|+q0★2004年第期《节省系统资源新方案——上网一键通,下线一键关》
u
wC.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+l"Cpwo'a4U0玩批处理的要点爱好者博墅
]1c/o!
V.wiy!
g
★在批处理运行中,只要按Ctrl+C或Ctrl+BackSprce组合键就可以结束它,请牢记这两个组合键,因为当你做出一个死循环批处理后,它们是你的“救命稻草”。
G!
J7l2]!
Mi+yi0★写批处理时最好在开始写上注释文字,从而让自己和别人都知道这个批处理的作用。
9_I`(OAC2p]S0★凡是命令中有FORMAT、DEL之类格式化、删除命令,最好特别小心,如果书写错误,很可能会将你的重要数据删除。
爱好者博墅#m}+rSpv$kA'xb
★文章中许多实例都涉及到了带%的变量,如果直接在DOS窗口中运行,那么只要输入一个“%”,如果写在批处理文件中,那么就得将其变成“%%”。
二、快速初识批处理
[KB7wo[0批处理是DOS1.0开发到最后时刻才诞生的,IBM告诉微软,他们需要用一些方法来一次又一次测试生产出来的PC,所以希望能够有一种方式使电脑自动运行一批命令,而不用人工一次次输入,于是微软就通过建立批处理文件来实现这个意图。
爱好者博墅[)h8S5vr|$h)o5jH
在后来出现的DOS操作系统里,这种自动化被更好地体现出来。
DOS系统允许用户使用任何一种文本编辑器将多条DOS命令按某种顺序以ASCⅡ文本形式写入一个扩展名为BAT(MS-DOS批处理)或CMD(WindowsNT命令脚本)的文件中,当在命令提示符下键入文件名并回车,或在Windows环境中双击该文件时,系统会调用或cmd.exe由前向后依次来自动执行这些命令。
这个命令集合就是批处理,它是DOS下可执行文件的一种。
一个完整的批处理由至少一条可以被正确执行的DOS命令组成,可见DOS命令是批处理的核心。
Z&]+|,sk.[.X'j0也有一种说法,把批处理称做“脚本”,或合起来称为“批处理脚本”,这也是合理的。
批处理和脚本有一个共同点,它们都是通过一组命令的正确执行来实现自身价值,不同之处在于,批处理使用的全部为DOS命令,而在脚本中可以使用应用程序的指令;脚本程序性强于批处理,批处理程序结构比较简单。
C~k(j\\o0JustDoIt爱好者博墅XON2o5TRXve
在运行刚才制作的批处理文件时,你会发现,每次运行后,list.txt中都会重复添加已有的文件列表,这样在实际使用时会比较麻烦,请将其修改一下:
}4R(~rX0:
:
文件列表器
}+a;ac*[A@"v0:
:
可以将文件夹中的个人数据文件(比如:
TXT、DOC、XLS等文件)写入列表文件中。
爱好者博墅wcy3sd#bt
X@;Ib
@echooff爱好者博墅WZW1j0\
ifexistlist.txtdellist.txt爱好者博墅c+QJl|;Xnbe
FOR/R%%CIN(*.TXT*.DOC*.XLS)DOecho%%~fnC>>list.txt
%K(QF1Yo0这样你会发现,每次的list.txt都是最新的文件列表,而且运行时出来的命令执行情况显示也没有了。
小提示爱好者博墅(l(@+ql;k
请教Windows中的黑脸老师爱好者博墅]sX*g#pbV
DOS命令并不像Windows程序那样直观,它往往要配合许多参数和固定的书写方法才能发挥作用,除了请教身边高手或是在网上求助外,建议最好事先问问Windows中的黑脸老师,打开命令行提示符,输入“命令/?
”,回车后,详细的答案就会全部列出来(见图2)。
另外,对于Windows2000/XP,也可以试试白脸老师——“帮助”,打开后,在“搜索”选项卡中输入命令,回车后即可找到结果,内容和黑脸老师讲的都一样。
三、掌握批处理的基本编程命令
:
xJd;L6Z|'UT;m;b01.@命令爱好者博墅/{a-sSDJhG3S
“@”符号是E-mail的专用符号,它在批处理中的作用是让系统在执行批处理命令时不显示该行命令本身。
也就是如果你把它放在一行命令的前面(比如:
@ifexitlist.txtdellist.txt),那么这行命令在执行过程中就不会显示了。
但如果每行都加上这个命令,不仅费事,而且有些多余,因此它常常和后面的“echooff”配合使用。
+R6`u%hLP02.echo命令
!
rc
NTm/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%%~fnC>>list.txt”。
3.:
:
和rem命令爱好者博墅,qY8RNm#Y&xq
:
:
和rem命令的作用和用法都完全一样,用来在批处理中做注释,增加程序可读性,这是一个值得提倡的好习惯。
它们后面跟随的语句不会在执行时显示或被执行。
爱好者博墅6sitl3Uvi+b/K
4.pause命令
6tWh~9h4T[\6v;}2zi0该命令在批处理中使用十分广泛,其作用是暂停批处理的执行,直到用户按下键盘上的任意键(Break键除外)。
批处理在执行过程中显示的所有信息都是一闪而过的,只有当用户暂停执行时,才能看到当前屏幕上的信息。
当程序要让用户看一段信息,或要给用户时间去考虑某个问题时,就可以在这里加上一个pause,批处理执行到这里时将显示“按任意键继续”的信息。
用法很简单,直接在要暂停的地方使用pause命令即可。
入门实例:
复制多张软盘爱好者博墅&h/jf3xL(O3x/C!
mO
打开记事本,输入以下语句,并将其保存为copya.bat:
wK
v,o1oD&\a"w0@echooff爱好者博墅,_3nW?
'e
:
begin爱好者博墅`(cg)O2ot$jA
copya:
\*.*d:
\back
?
2VmMj6JO0echoPleaseputanewdiskintodriverA爱好者博墅4j-w9RQL5W2IyB@
pause爱好者博墅7T1ETE0mjY#R
gotobegin爱好者博墅3X-dKZE
每当复制完一张软盘后,会提示插入一张新软盘,并停止运行,在插入新软盘后,按任意键就能继续执行复制操作。
+vl)McNm;T:
a-c*d,m05.call命令
6Gw(`m]0u_0该命令是用来从一个批处理中调用另一个批处理的,用法为:
CALL[驱动器][路径]批处理名[参数]。
使用此命令,可以实现多个批处理互相调用,类似于程序中各个模块之间的互相调用。
在后面实例中,你可以亲自体验一下这个命令。
"c#w#rju`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%LBzc
1.if命令
l\:
T$u{Br1m0懂得编程的朋友都知道,“if”命令在各种程序中都有使用,而且用得十分普遍。
在批处理中,“if”命令和其他程序语言中的作用基本一样,都是代表“如果……就……”,是一个选择判断命令,或者说条件命令。
在批处理中,“if”命令的使用也十分普遍,凡是牵扯到分支结构的地方都要使用该命令。
爱好者博墅(ziy*o6B]q-X7R
if命令一点通爱好者博墅9^IE3R*F;G~
if命令判断程序执行时条件是否满足,如果满足就执行一个操作,不满足就执行另一种操作,条件可以是单个,也可以是多个的。
根据if命令判断的对象,可将其分为三类:
爱好者博墅E.x
h#D1c|W5VD
输入判断:
IF[NOT]参数==字符串command
M|^xhF0存在判断:
IF[NOT]EXISTfilenamecommand
y_([.[
A7T3oy*V6f0结果判断:
IF[NOT]ERRORLEVELnumbercommand
8I|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接着在Autoexec.bat文件中,写入了相应if语句:
爱好者博墅aFFpOLwT'~
其中“"%config%"”是参数,指Config.sys中设置的Menu,如果输入1,也那么就是选择[Menu]下的“Clone,Backupyoursystem.”(“,”后面为显示文字,你可以随意修改,比如改为“beifenwodeWindows”)。
爱好者博墅5n$?
l8H&}j
语句翻译:
这段if语句如果翻译成日常用语,应该是:
爱好者博墅j1jw_^#aa.S
如果你按下1键,也就是选择了Clone(菜单显示的“Backupyoursystem.”),那么会直接进入“Clone”部分,并执行其下的Ghost命令来备份系统。
爱好者博墅lQ&b-i+[(b
如果你按下2键,也就是选择了RestoreHD(菜单显示的“RestorefromHD.”),那么会直接进入“RestoreHD”部分,执行其下的Ghost命令来恢复系统。
爱好者博墅(F0ws'CedSe$K*e6qR
\Z
n
JustDoIt爱好者博墅1^!
|0u&U]Zw
请在显示的菜单中添加“backtoDOS”,选择后自动返回DOS。
爱好者博墅5x&lO;N2c
★在Config.sys文件的[Menu]下应添加:
爱好者博墅]r:
O)[0s"]
W
menuitem=NO,backtoDOS.爱好者博墅f6i7DrwC)ZY(^
并在下面适当位置添加以下命令:
*|W0n$F%d$]j7R0[NO]
1B[+~w5o\:
p{3~0device=himem.sys/testmem:
off爱好者博墅'sU1g
TG
★在Autoexec.bat文件中添加以下语句:
爱好者博墅OSnk_%XC3Z-O
IF"%config%"=="NO"GOTOQUIT爱好者博墅:
`LV5n@7U`
在下面适当位置添加:
E~(jK/I2^c)^0:
QUIT
;pk.z.`O7RYdIRB0echoTogethelp,typeHELPandpressENTER.
@Zd9sf:
Px0echo.
K?
De|Ht}#C0remcleanupenvironmentvariables爱好者博墅1N@Vp/i3F@
setCDROM=
.t6v&xdE_$Y$F0setLglDrv=
入门实例2:
文件自动分类保存爱好者博墅+Wmu1C,P;v
学习重点:
if命令的存在判断
+M,v9ojAT+~0实现功能:
对于平时整理个人数据非常有帮助,能够自动将同一类文件复制到特定文件夹中。
爱好者博墅T0T8QIc
请在D盘新建data目录,接着再新建txt子目录。
爱好者博墅KUd+Z@
:
:
文件自动分类爱好者博墅a?
vH|Bm@u?
'Xh#n
:
:
让文本文件自动移动到TXT文件夹
2y|5T4M.}T0ifexist*.txtmove*.txtD:
\data\txt
"p'M#v]c.X'D:
P&v)P0保存为movetxt.bat,放在D:
\data文件夹中,复制包含TXT文件在内的一些文件到这个文件夹中,接着运行这个批处理,你会发现所有TXT会自动移动到TXT子文件夹中。
.eO_/JSC0语句翻译:
如果当前文件夹中存在TXT文件,将它们全部移动到D:
\data\txt文件夹中。
~Y;WV.?
[3v0JustDoIt
a+ST5~
Md0扩展这个批处理文件,使其能自动将DOC文件移动到WORD文件夹,XLS文件移动到Excel文件夹。
5?
muWE0e%G_6r0小提示
s
NPjd3C2_0if命令的存在判断不能用来判断一个目录是否存在,只能判断文件,但在每个目录下都存在空设备,因此可以使用判断空设备是否存在的方式来间接判断目录是否存在。
方法为:
IF[NOT]EXIST[drive:
][path]\nulcommand。
例如:
ifnotexiste:
\tools\conmde:
\tools,如果不存在e:
\tools这个目录就新建立一个。
进阶实例1:
冰河木马检查器
5s1O1~]*{g%~0打开“记事本”,输入以下命令,将其保存为binghe.bat(语句中的①、②、③不用输入):
*Y'E%A?
3N`7jhY0@echooff爱好者博墅;kP
|v;w"{
netstat-a-n>a.txt①爱好者博墅1T1p2y\1dB&n
finda.txt"7626"②爱好者博墅+Tb,['o#Y0ci.W
iferrorlevel2(
i%Q(b@"D'nI0echoYouhaveinfectedGLACIER!
爱好者博墅SyfA?
2h#s.wDwO
)else(爱好者博墅3~-sFO5{~
echoCongratulations!
NoGLACIER!
③爱好者博墅yl}oh7Z!
^
)爱好者博墅2vxT8es$K:
[z'r
dela.txt &pause
|WoB&@4qu){0运行后,如果显示“YouhaveinfectedGLACIER!
”,说明你中了冰河,需要使用相关工具进行清查,如果显示“Congratulations!
NoGLACIER!
”则说明没有问题。
并且自动删除生成的a.txt文件。
!
c$x"k0r'uf9U;v:
{0语句翻译:
这里使用了if命令的结果判读,它是if命令三种判断中最重要的一种。
由于DOS命令在执行完毕后都会给系统一个返回值,用来表示执行结果。
在if命令中设置一个比较值,如果返回值大于或等于比较值就继续执行,否则就退出if命令。
JOS&_?
Y0①显示出你的电脑当前所开放的所有端口及所有已建立的有效连接,并输出到式a.txt文件中)爱好者博墅^v2M_!
M!
c
②在a.txt文件中用“7626”作为关键词查找,因为冰河会打开多个7626端口爱好者博墅3u(h"i9o-Y,w+~/H/`O5V
③如果检查结果等于或大于2,表示find命令找到特定字符串,就会执行第一个echo命令,否则就执行else后面的echo命令。
2.for命令爱好者博墅zLM^^P]#dFi
for命令是批处理中最具程序特点、也是最强大的命令之一,它是一个循环命令,用来对多个目标执行同一个操作,通常情况下是对一个或一组文件中的每一个对象进行定义的操作,直到所有对象都执行这一操作完成,或被强制终止。
$f5O)SP^$m-Oa0特别提醒:
在下面的实例操作中,请特别体会和注意for语句的循环操作,也就是一个接一个执行。
TP:
|Sj"a,}PP0for命令一点通爱好者博墅m`e#m'K$A(i
A&N
基本用法:
for%variablein(set)docommand
U^7d9_^\s6T0简明实例:
for%ain(*.tmp)dodel%a爱好者博墅3X,`1Nts5i@*d(c
快速翻译:
“%a”表示变量,它是由(*.tmp)来进行定义的,在这里变量就是所有TMP文件,而“do”(做)后面是删除操作。
整体翻译过来就是,首先告诉for命令“%a”变量就等于所有TMP文件,后面只要一说“%a”就是说所有TMP文件,接下来就是一个接一个地删除TMP文件,直到删除完为止。
?
l^I\hrn(Ru1g0特别说明:
“in”和“do”为该命令中必不可少的关键字;变量可以使用除%0~%9以外的所有数字和字母,例如%i,但变量有大小写之分,%i不等于%I;另外,如果直接在DOS窗口中运行for命令,那么变量前只要一个%符号即可,如果写成批处理文件,那么就得加两个%符号,否则会提示出错。
如%%i。
[;m#^}#R)N7HAZ0小知识爱好者博墅!
Y#Gp&`aZ#]
什么是变量?
#p'e`{hB0变量在编程中经常被用到,因为它不是固定的,而是根据用户的设置或输入内容不断变化着,所以叫变量。
在for命令中,它会根据后面(set)中定义的内容而变化。
举个通俗的比喻,变量就像是火车上的座位,它并不属于任何人,如果你一旦坐在某个座位上(比如1号),那么在你下车前,这个座位便和你联系在一起了,大家一叫1号座位的同志,也就是在叫你。
但当你下车后,1号座位便和你没有联系了。
根据在(set)部分定义的操作对象的不同,可将for命令作用分为四类:
目录操作(/d)、目录树操作(/r)、数值范围操作(/l)、文件解析(/f)。
下面通过几个精彩实例切实来体会它们。
爱好者博墅1AkI,C%Q$y7Oq
入门实例1:
快速清理你的桌面爱好者博墅9NznT,A3F1{
学习重点:
初步了解for命令的妙用爱好者博墅9n5iL/B0U8q"Jln
实现功能:
许多朋友经常会把一些个人文件放置在桌面上,比如文本文件、Word文件、下载的软件等,这样造成桌面非常混乱,而下面制作的批处理文件,能自动将它们分类移动到D盘DATA文件夹下的TXT、WORD、DOWNLOAD子文件夹中,对于在桌面子文件夹中的文件,则不会移动。
爱好者博墅%l7o1`a;V+tH6_
:
:
快速清理桌面
;pb.dq[i_B)R0@echooff
|yg(~y[6U(R0for%%ain(*.txt)domove"%%a"D:
\data\TXT爱好者博墅5J;[Y*]#{j(nP4@
for%%bin(*.doc)domove"%%b"D:
\data\WORD
|:
E
~2?
iB0for%%cin(*.exe)domove"%%c"D:
\data\DOWNLOAD爱好者博墅M\mf2v5d[
for%%din(*.zip)domove"%%d"D:
\data\DOWNLOAD
mJ8B(Fc2cF.d0语句翻译:
首先设置了四个变量,并且分别表示所有TXT、DOC、EXE、ZIP文件,接着将所在文件夹中四种类型文件一个接一个地移动到D:
\data相应子文件夹。
;G0N1@4p4^Gm6V0JustDoIt爱好者博墅!
G%R8C+~A8{
★将这个批处理文件直接放置在经常保存个人数据的文件夹中,从而可以实现快速整理个人数据文件。
爱好者博墅7\"x\-O:
w!
PZGGf
★如果还想将桌面子文件夹中的文件也一并移动,请在for后面加上“/r”参数。
入门实例2:
快速在当前文件创建子文件夹
:
oA"j2L#bN#]0学习重点:
“/d”参数,它表示只针对定义范围的目录进行操作,也就是批处理文件放置在什么目录,就只针对这个目录操作。
x!
t"Lo#V0实现功能:
将这个批处理文件放置在任意文件夹中并运行,就会自动创建文件名为data、download、game的子文件夹。
z*Sa'U*|d1N+A5|0:
:
快速创建文件夹
Z-u^dSG3s1Q2W0@echooff
/aAP;c9]q%@)@0for/d%%iin(data,download,game)domd%%i爱好者博墅