批处理⽂件从⼊门到精通
批处理⽂件是由⼀个或⼀个以上的DOS命令及可执⾏命令组成的带有扩展名.BAT的⽂件。当⽤户以批处理⽂件名为命令时,DOS会⾃动依次执⾏⽂件中的命令。批处理⽂件的特点是⼀次建⽴可多次执⾏。
在批处理⽂件中有⼀个特殊的批处理⽂件,每次启动计算机时,系统⾃动执⾏该⽂件中的每⼀条命令。该⽂件必须满⾜两个条件:⼀是⽂件名为AUTOEXEC.BAT,⼆是该⽂件的位置必须放在启动盘(也可称为系统盘)的根⽬录下。
在批处理⽂件中除了使⽤DOS命令之外,还可使⽤批处理⼦命令,这些命令也可看作DOS的内部命令,它们是:
1)ECHO--显⽰⽅式设置;其中ECHO ON是使以后的命令在执⾏前先显⽰,ECHO OFF是使以后的命令在执⾏前不显⽰,ECHO MASSAGE 是不论ECHO的状态为ON或OFF,都显⽰MESSAGE所指定的信息。
2)REM--注释命令。
3)PAUSE--暂停系统处理,系统显⽰Press any key to continue…,等待⽤户按任意⼀个键后继续执⾏。
4)GOTO--转向⼦命令。
5)IF--条件⼦命令。
6)FOR--循环⼦命令。
7)SHIFT--改变参数的位置。
电脑每次启动时都会寻autoexec.bat这条批处理⽂件,从⽽可执⾏⼀些每次开机都要执⾏的命令,如设置路径path、加载⿏标驱动mouse、磁盘加速smartdrv等,可以使您的电脑真正⾃动化。
  echo、@、call、pause、rem 是批处理⽂件最常⽤的⼏个命令,我们就从他们开始学起。 echo 表⽰显⽰此命令后的字符
echo off 表⽰在此语句后所有运⾏的命令都不显⽰命令⾏本⾝
@ 与echo off相象,但它是加在其它命令⾏的最前⾯,表⽰运⾏时不显⽰命令⾏本⾝。
call 调⽤另⼀条批处理⽂件(如果直接调⽤别的批处理⽂件,执⾏完那条⽂件后将⽆法执⾏当前⽂件后续命令)
pause 运⾏此句会暂停,显⽰Press any key 等待⽤户按任意键后继续
rem 表⽰此命令后的字符为解释⾏,不执⾏,只是给⾃⼰今后查⽤的
  例:⽤edit编辑a.bat⽂件,输⼊下列内容后存盘为c:\a.bat,执⾏该批处理⽂件后可实现:将根⽬录中所有⽂件写⼊ a.txt中,启动UCDOS,进⼊WPS等功能。
  批处理⽂件的内容为:         ⽂件表⽰:
    echo off            不显⽰命令⾏
    dir c:\*.* &       将c盘⽂件列表写⼊a.txt
    call c:\ucdos\ucdos.bat    调⽤ucdos
    echo 你好           显⽰"你好"
    pause              暂停,等待按键继续
    rem 使⽤wps           注释将使⽤wps
    cd ucdos            进⼊ucdos⽬录
    wps               使⽤wps 
  批处理⽂件中还可以像C语⾔⼀样使⽤参数,这只需⽤到⼀个参数表⽰符%。
  %表⽰参数,参数是指在运⾏批处理⽂件时在⽂件名后加的字符串。变量可以从 %0到%9,%0表⽰⽂件名本⾝,字符串⽤%1到%9顺序表⽰。
  例如,C:根⽬录下⼀批处理⽂件名为f.bat,内容为 format %1
  则如果执⾏C:\>f a:    则实际执⾏的是format a:
  ⼜如C:根⽬录下⼀批处理⽂件的名为t.bat,内容为 type %1 type %2
  那么运⾏C:\> b.txt 将顺序地显⽰a.txt和b.txt⽂件的内容
  if goto choice for 是批处理⽂件中⽐较⾼级的命令,如果这⼏个你⽤得很熟练,你就是批处理⽂件的专家啦。
if 表⽰将判断是否符合规定的条件,从⽽决定执⾏不同的命令。有三种格式:
1、if "参数" == "字符串"  待执⾏的命令
参数如果等于指定的字符串,则条件成⽴,运⾏命令,否则运⾏下⼀句。(注意是两个等号)
如if "%1"=="a" format a:
2、if exist ⽂件名 待执⾏的命令
如果有指定的⽂件,则条件成⽴,运⾏命令,否则运⾏下⼀句。如if exist config.sys edit config.sys
3、if errorlevel 数字 待执⾏的命令
如果返回码等于指定的数字,则条件成⽴,运⾏命令,否则运⾏下⼀句。如if errorlevel 2 goto x2  DOS程序运⾏时都会返回⼀个数字给DOS,称为错误码errorlevel或称返回码
goto 批处理⽂件运⾏到这⾥将跳到goto 所指定的标号处,⼀般与if配合使⽤。如:
goto end
:end
echo this is the end
标号⽤ :字符串表⽰,标号所在⾏不被执⾏
choice 使⽤此命令可以让⽤户输⼊⼀个字符,从⽽运⾏不同的命令。使⽤时应该加/c:参数,c:后应写提⽰可输⼊的字符,之间⽆空格。它的返回码为1234……
如: choice /c:dme defrag,mem,end
将显⽰
defrag,mem,end[D,M,E]?
例如,test.bat的内容如下:
@echo off
choice /c:dme defrag,mem,end
if errorlevel 3 goto defrag 应先判断数值最⾼的错误码
if errorlevel 2 goto mem
if errotlevel 1 goto end
:defrag
c:\dos\defrag
goto end
:mem
mem
goto end
:end
echo good bye
此⽂件运⾏后,将显⽰ defrag,mem,end[D,M,E]? ⽤户可选择d m e ,然后if语句将作出判断,d表⽰执⾏标号为defrag的程序段,m表⽰执⾏标号为mem的程序段,e表⽰执⾏标号为end的程序段,每个程序段最后都以goto end将程序跳到end标号处,然后程序将显⽰good bye,⽂件结束。
for 循环命令,只要条件符合,它将多次执⾏同⼀命令。
格式FOR [%%f] in (集合) DO [命令]
只要参数f在指定的集合内,则条件成⽴,执⾏命令
如果⼀条批处理⽂件中有⼀⾏:
for %%c in (*.bat *.txt) do type %%c
含义是如果是以bat或txt结尾的⽂件,则显⽰⽂件的内容。
  DOS在启动会⾃动运⾏autoexec.bat这条⽂件,⼀般我们在⾥⾯装载每次必⽤的程序,如: path(设置路径)、smartdrv(磁盘加速)、mouse(⿏标启动)、mscdex(光驱连接)、 doskey(键盘管理)、set(设置环境变量)等。
  如果启动盘根⽬录中没有这个⽂件,电脑会让⽤户输⼊⽇期和时间。
  例如,⼀个典型的autoexec.bat内容如下:
@echo off                     不显⽰命令⾏
prompt $p$g                    设置提⽰符前有⽬录提⽰
path c:\dos;c:\;c:\windows;c:\ucdos;c:\tools   设置路径
lh c:\dos\doskey                加载键盘管理
lh c:\mouse\mouse               加载⿏标管理
lh c:\               加载磁盘加速管理
lh c:\dos\mscdex /S /D:MSCD000 /M:12 /V      加载CD-ROM驱动
set temp=c:\temp                  设置临时⽬录
⼀些危险的命令会被某些有⼼⼈写进批处理⽂件中去,在⽹上四处传播搞破坏,例如在.bat中写进:
  deltree -y c:兡
  接下来的事情就是你赶紧拿条⼿⼱擦眼泪吧。从这个意义上说它⽐病毒还要恶毒。
  类似的,在.hlp(帮助⽂件)、.pif(指向DOS的快捷⽅式)、.lnk(WINDOWS快捷⽅式)这些⽂件中也可以写⼊危险的命令,如果不⼩⼼执⾏了那就危险了。防范以上调⽤DOS命令进⾏破坏的⽂件,被动的做法是通过将format、deltree这类命令改名换姓。
(⼀)应⽤DOS重定向功能
DOS的标准输⼊输出通常是在标准设备键盘和显⽰器上进⾏的, 利⽤重定向,可以⽅便地将输⼊输出改向磁盘⽂件或其它设备。如在批处理命令执⾏期间为了禁⽌命令或程序执⾏后输出信息⽽扰乱屏幕, 可⽤DOS重定向功能把输出改向NUL设备(NUL不指向任何实际设备):
C:\>COPY A.TXT B.TXT > NUL。
命令执⾏结束不显⽰"1 file(s) copied"的信息。有的交互程序在执⾏时要求很多键盘输⼊, 但有时输⼊是固定不变的, 为加快运⾏速度, 可预先建⽴⼀个输⼊⽂件,此⽂件的内容为程序的键盘输⼊项, 每个输⼊项占⼀⾏。假如有⼀个程序ZB, 其输⼊项全部包括在⽂件IN.DAT中, 执⾏C:\>ZB NUL 程序就⾃动执⾏。
(⼆)应⽤DOS管道功能
DOS的管道功能是使⼀个程序或命令的标准输出⽤做另⼀个程序或命令的标准输⼊。如把DEBUG的输⼊命令写⼊⽂件AAA, ⽤TYPE命令通过管道功能将AAA的内容传输给DEBUG, 在DEBUG执⾏期间不再从控制台索取命令参数, 从⽽提⾼了机器效率。命令为: C:\>TYPE
AAA|DEBUG >BBB。
(三)⼦程序
在⼀个批处理⽂件可⽤CALL命令调⽤另⼀个⼦批处理⽂件, 当⼦批⽂件执⾏结束后,⾃动返回⽗批⽂件, 继续向下执⾏。如: A.BAT B.BAT,A 调⽤B,A.BAT内容如下:
@ECHO OFF
CALL B
CD \BASIC
BASICA BG
@ECHO ON
(四)菜单选择功能
DOS功能调⽤31H或4CH所提供的⼀字节的返回码, 通过批处理⼦命令IF和ERRORLEVEL对返回码进⾏处理, 可达到⾃动执⾏⼀批命令的⽬的。在批处理⽂件中实现⾼级语⾔所有的菜单提⽰功能, 使批处理⽂件变得更灵活⽅便。先⽤DEBUG建⽴⼀个菜单驱动程序MENU.COM,对应地编写⼀个批处理⽂件LG.BAT。具体内容和⽅法见下表:
DEBUG
-A
-166C:0100 MOV DX,111
-166C:0103 MOV AH,09
-166C:0105 INT 21
-166C:0107 MOV AH,01
-166C:0109 INT 21
-166C:010B MOV AH,4C
-166C:010D INT 21
-166C:010F INT 20
-166C:0111 DB "******************************"0D 0A
-166C:0131 DB "* 1.Turbo Pascal 5.00 *"0D 0A
-
166C:0151 DB "* 2.Turbo Basci 1.00 *"0D 0A
-166C:0171 DB "* 3.Turbo Prolog 2.00 *"0D 0A
-166C:0191 DB "* 4.Turbo C 2.00 *"0D 0A
-166C:01B1 DB "* 0.Exit *"0D 0A
-166C:01B1 DB "******************************"0D 0A
-166C:01F1 DB "Your choice(0..4) : "24 0D 0A 1A
-166C:0209
-R CX
CX 0000
:108
-N MENU.COM
-
W
批处理文件怎么做
Writing 0108 bytes
-Q
@ECHO OFF:
START
CLS
MENU
IF ERRORLEVEL 52 GOTO C
IF ERRORLEVEL 51 GOTO PRO
IF ERRORLEVEL 50 GOTO BAS
IF ERRORLEVEL 49 GOTO PAS
IF ERRORLEVEL 48 GOTO EX
CLS
GOTO START
AS
CD \TP5.00
TURBO
CD \
GOTO START
:BAS
CD \TB
TB
CD \
GOTO START
RO
CD \TPROLOG
PROLOG
CD \
GOTO START
:C
CD \TURBOC
TC
CD \
GOTO START
:EX
@ECHO ON
执⾏LG, 屏幕左上⾓出现⼀个菜单, 并提⽰⽤户输⼊选择, 当选择的功能执⾏结束,重新返回主菜单请求选择, 直到选择"0"号功能, 程序结束返回DOS。
(五)应⽤命令处理程序完成⼤量重复⼯作
DOS提供调⽤次级命令程序的⽅法, 可实现与⼦程序等效的功能, 在MS DOS3.3以前的DOS版本下⾮常有⽤。如你有⼀批FORTRAN源程序需要编译, ⾸先编写两个批⽂件MAKEOBJ.BAT、C.BAT, 然后执⾏MAKEOBJ, 即可把当前⽬录下的所有扩展名为.FOR的FORTRAN源程序编译成OBJ⽂件。这种⽅法迅速正确, ⼈机交互少, 减轻了程序员的的⼤量劳动。
MAKEOBJ.BAT C.BAT
@ECHO OFF
ECHO COMPILE FORTRAN PROGRAMS.
FOR %%A IN (*.FOR) DO COMMAND /C C %%A
ECHO FINISH !
@ECHO ON @ECHO OFF
ECHO ------ COMPILE %1 ------
FOR1 %1; >NUL
FOR2 >NUL
@ECHO ON
引⽤原⽂:
写博客是为了记住⾃⼰容易忘记的东西,另外也是对⾃⼰⼯作的总结,⽂章可以转载,⽆需版权。希望尽⾃⼰的努⼒,做到更好,⼤家⼀起努⼒进步!
如果有什么问题,欢迎⼤家⼀起探讨,代码如有问题,欢迎各位⼤神指正!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。