![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-13 19:29 |
共 47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行 |
| DOS学习入门 & 精彩文章 (教学室) » 批处理文件怎么制作 |
| 可打印版本 1,412 / 9 |
| 第1楼 zwq2009 | 发表于 2004-04-10 00:00 |
| 初级用户 发帖 5 积分 118 | |
|
批处理文件怎么制作 那位高手知道关于制作批处理文件的教程吗?
|
|
| 第2楼 老汉 | 发表于 2004-04-11 00:00 |
| 初级用户 发帖 2 积分 110 | |
|
去问一问 Kinglion 吧。
|
|
| 第3楼 wphs0326 | 发表于 2004-04-11 00:00 |
| 银牌会员 发帖 509 积分 1,708 来自 安徽淮南 | |
|
批处理文件是由一个或一个以上的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 to continue... 等待用户按任意键后继续 rem 表示此命令后的字符为解释行,不执行,只是给自己今后查找用的 例:用edit编辑a.bat文件,输入下列内容后存盘为c:\a.bat,执行该批处理文件后可实现:将根目录中所有文件写入 a.txt中,启动UCDOS,进入WPS等功能。 批处理文件的内容为: 文件表示: echo off 不显示命令行 dir c:\*.* >a.txt 将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:\>t a.txt 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? 例如,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 ,然后if语句将作出判断,d表示执行标号为defrag的程序段,m表示执行标号为mem的程序段,e表示执行标号为end的程序段,每个程序段最后都以goto end将程序跳到end标号处,然后程序将显示good bye,文件结束。 for 循环命令,只要条件符合,它将多次执行同一命令。 格式FOR 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.com 加载键盘管理 lh c:\mouse\mouse.com 加载鼠标管理 lh c:\dos\smartdrv.exe 加载磁盘加速管理 lh c:\dos\mscdex /S /D:MSCD000 /M:12 /V 加载CD-ROM驱动 set temp=c:\temp 设置临时目录 |
|
| 第4楼 wphs0326 | 发表于 2004-04-11 00:00 |
| 银牌会员 发帖 509 积分 1,708 来自 安徽淮南 | |
|
(一)应用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 ASCD \TP5.00 TURBO CD \ GOTO START :BAS CD \TB TB CD \ GOTO START ROCD \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 |
|
| 第5楼 wphs0326 | 发表于 2004-04-11 00:00 |
| 银牌会员 发帖 509 积分 1,708 来自 安徽淮南 | |
|
批处理文件应用技巧
虽然Windows 3.x和Windows95应用越来越广泛,但DOS仍然为许多用户所钟爱。就DOS的批处理文件而言,许多用户在实际应用中却没有发挥其应有的作用,本文就DOS批处理文件的应用谈几点技巧,仅供读者参考。 1.显示选择的DIR信息 DOS的DIR命令为了便于用户显示一个目录中特殊类型的文件,提供了开关和通配符的功能。但是DIR命令也有许多不尽人意的方面,例如,如果我们要显示一个目录中除扩展名为.TXT以外的文件,则DIR命令就显得无能为力了。解决的方法是借助FIND命令来实现这一功能: DIR /A-D | FIND/V “TXT” “/A-D”开关是告诉DIR命令不要显示目录,管道命令“|”是指定所列目录按FIND命令的执行结果显示,/V开关是告诉FIND命令列出所有不包括双引号内字符串的所有行,双引号内的字符串要以空格为前导(空格是使FIND命令不能排除其所发现的基本文件名中包括字符串TXT的文件,如NEWTXT.DOC,所以空格在这里是不能缺少的)。实际上FIND命令可以在一行命令中多次出现,如显示一个目录中不包括扩展名为.TXT和.DOC的所有文件,命令如下: DIR /A-D | FIND/V“TXT”FIND/V“DOC” 下面我们给出一个利用上述技巧的实例,该实例用以显示除指定扩展名以外的所有文件,这里假定文件名为NEWDIR,则命令格式为: NEWDIR 其中扩展名为扩展名1和扩展名2的文件是用户所不想显示的。 @ECHO OFF IF“%1”==“”GOTO NOPARAM SET EXTENSION1=%1 SET EXTENSION2=%2 IF“%2”==“”SET EXTENSION2=. DIR /A-D | FIND /V /I“%EXTENSION1%” | FIND /V /I “%EXTENSION2%” |MORE GOTO END :NOPARAM ECHO No file extension specified. Syntax ECHO is: ECHO. ECHO NEWDIR ECHO. :END SET EXTENSION1= SET EXTENSION2= 值得注意的是FIND命令后面增加了一个开关/I,这一开关的作用是使FIND命令忽略在命令行中键入扩展名的情况。 2.使输入自动化 在我们编写批处理文件时,有时需要在文件中指定日期,一般而言,我们在批处理文件中加入DATE命令,这样在运行的过程中程序就会提示用户输入日期。这里我们给出一种在DATE命令后面增加回车的方法: ECHO. | DATE ECHO. 用于向屏幕上发送一个回车,管道符号用于重定向回车到DATE命令。为了不显示DATE命令的提示,可以用下列命令: ECHO. | DATE | FIND“Current” 如果想要在文本文件中增加一行日期,可以用下面的命令: ECHO. | DATE | FIND “Current” >THISDATE.TXT 这种方法同样适合DOS的TIME命令和FORMAT命令。 3.屏蔽显示信息 在批处理文件中,“ECHO”和“|”配合是很有用的,这种配合有时可以消除我们所不希望见到的显示信息。例如在一个目录中删除所有文件,但又不想让系统显示“Are you sure(Y/N)”则可用如下命令: ECHO Y | DEL *.* >NUL 在实际应用中,我们可以合理地配合使用ECHO和管道符,以使屏幕显示的内容符合我们的要求。 4.设置或重新设置路径 随着应用系统的增多,有些应用需要用户将它们所在的目录加入到PATH语句中,但PATH所支持的字符数不能超过127个字符,这样在具体应用中,有时就可能受到限制。这里我们通过一个例子探讨解决的方法、假设,我们所设置的路径如下: PATH=C:\DOS;C:\UTILS;C:\BAT 而这时我们需要运行一种字处理软件,同时需要将路径设置成: PATH=C:\DOS;C:\UTILS;C:\BAT;C:\TEXTEDIT 在运行完上述字处理软件后,还需要将路径设置成原来的样子,这里我们可以通过下面的批处理程序来完成: @ECHO OFF SET OLDPATH=%PATH% PATH %PATH%;C:\TEXTEDIT CD C:\TEXTEDIT TEXTEDIT SET PATH=%OLDPATH% SET OLDPATH= CD C:\ 批处理程序的第二行是将现行路径保存在环境变量OLDPATH中;第三行合并路径;第六行在系统运行完成后,DOS将控制权交给批处理程序,这时将路径设置回原来的路径。通过这种方法我们就可以解决上述问题。 5.合理使用REM、::、和GOTO 在批处理文件中REM语句的作用众所周知,但在具体应用中可以使用::和GOTO代替REM语句,例如: ECHO The following lines are remarks that will not be display ::This line will not be display ::Neither will this line ECHO the batch file proceeds 同样可以使用GOTO语句实现上述功能: ECHO The following lines are remarks that will not be display GOTO JUMP This line will not be display Neither will this line :JUMP ECHO The batch file proceeds 一般而言,合理使用REM、::和GOTO将提高批处理文件的使用效率。通常当注释较短时,使用::或GOTO;当注释较长时使用REM。因为REM的执行时间和注释的长短无关,而::和GOTO在注释较长时执行时间将加倍。 6.将用户的输入转换成大写 编写批处理文件的人员都知道,IF语句对于大小写字母是敏感的,例如: IF“%1”==“ERASE” GOTO ERASE 如果用户键入erase或Erase或者这五个字母的大小写任意组合,DOS将认为IF语句的条件没有满足,进而不执行GOTO语句。解决这一问题的办法是利用PATH命令,将用户输入的小写字母转换成大写,程序如下: SET OLDPATH=%PATH% SET PATH=%1 SET USERINPUT=%PATH% SET PATH=%OLDPATH% IF %USERINPUT%==ERASE GOTO ERASE SET OLDPATH= 第一行将现行路径存储在环境变量OLDPATH中,第二行将PATH变量设置成用户输入,并将输入内容转换成为大写,第三行将一个环境变量设置成PATH(即用户输入的内容),第四行还原PATH的原有内容,第五行将转换后的字符串用于IF语句,最后一行清除OLDPATH环境变量。 7.FOR...IN...DO循环 在要求一次执行一个以上命令时,FOR...IN...DO的局限性就显示出来了。例如在批处理文件中,我们不能简单地通过MORE命令显示一个目录中的每一个文件,然后有选择地删除它们。下面的例子演示了克服上述问题的方法: @ECHO OFF IF“%1”==“:TASKS:” GOTO TASKS FOR %%A IN (%1) DO CALL %0 :TASKS: %%A GOTO END :TASKS CLS MORE %2 DEL /P %2 :END 这里我们将这一批处理程序定名为LOOPER,如果我们要显示所有的文本文件而后给出一个删除选择,则可键入: LOOPER *.TXT 这样在第一次执行时,第二行的IF语句检查%1是否包含:TASKS:;因为此次执行%1不包含:TASKS:,所以程序运行FOR语句。本例中,程序首先提出第一个扩展名为.TXT的文件而后执行CALL命令。假设第一个文本文件为ABC.TXT,则DOS执行如下命令: CALL LOOPER :TASKS: ABC.TXT 即LOOPER带两个参数(:TASKS:和ABC.TXT)运行了自身的第二个拷贝。当LOOPER第二次运行时,再次检查%1是否包含值:TASKS:,而此次条件满足,LOOPER执行:TASKS:下面的程序段,MORE显示ABC.TXT的内容,而后DEL /P显示是否删除文件的选择。当:TASKS:例程执行完成,DOS关闭第二个LOOPER并返回第一个LOOPER的FOR ...IN ...DO语句,从而进行下一个.TXT文件的处理。 8.隐藏命令显示 许多DOS命令都要显示他们的结果,但有时由于这些结果显示在屏幕上会使用户眼花缭乱。如COPY FILE1.TXT FILE2.TXT屏幕上会显示“1 file(s) copied”,如果我们不想让系统显示这一信息,则可采用如下方法: COPY FILE1.TXT FILE2.TXT>NUL 这种方法同样适合于批处理文件的暂停命令PAUSE,可屏蔽PAUSE命令的显示信息“Press any key to continue”。例如: @ECHO OFF ECHO There is no disk in drive A,Insert a ECHO disk and press Enter. PAUSE>NUL 批命令中的子程序 大多数成熟的高级编程语言允许您把常用的例程建立成独立的模块即子程序,它保 留了代码的独立性,使程序模式化,便于组织.至少可以说DOS的批命令不完全支持子程 序,但在任何时候你都可以用GOTO命令调用子程序. 通常,GOTO命令用的标号还可以接受存储在环境变量中的标号,如: SET LABELNAME=START GOTO%LABELNAME% 通过在子程序的开始替换标号并在子程序结束的地方设置GOTO %RETURN%语句,你 可以在DOS的批命令中建立子程序.只要SET 一个环境变量RETURN,你可在批命令的任 意专访调用子程序.例如,你可以给标号赋值并在下一行调用该子程序,招生GOTO语句 跳至该子程序的开始处,程序结构如: REM This set the environment REM variable and calls the REM subroutine SET RETURN=HERE GOTO SUB HERE SUB REM Place subroutine statements REM below GOYO %RETURN% 语句GOTO SUB传送到子程序SUB,在SUB中你可以执行任何语句.执行至 GOTO%RETURN%时,批命令返回控制到号HERE,因环境变量RETURN被复赋值为HERE,如果 你 每次调用SUB都 用叭一的标号(如RETURN),则可多次多处调用SUB. |
|
| 第6楼 wphs0326 | 发表于 2004-04-11 00:00 |
| 银牌会员 发帖 509 积分 1,708 来自 安徽淮南 | |
|
以上均为转帖,请原作者不要怪罪。。。
|
|
| 第7楼 eboyzwb | 发表于 2004-04-24 00:00 |
| 初级用户 发帖 21 积分 185 | |
|
强!
|
|
| 第8楼 hendry2003 | 发表于 2004-04-25 00:00 |
| 初级用户 发帖 20 积分 192 来自 上海市 | |
|
请问第2楼的大虾,FOR不是批处理文件的专用的命令吗,你在下面举的例子里怎么该成了FOR1了呢,小弟石头一个,能给我说以下吗?谢谢了。
|
|
| 第9楼 jjwj | 发表于 2004-05-14 00:00 |
| 初级用户 发帖 18 积分 163 | |
|
棒棒棒,我很菜,想老大学习
|
|
| 第10楼 laochang409 | 发表于 2004-06-18 00:00 |
| 中级用户 发帖 44 积分 297 | |
|
非常感谢!回去慢慢消化。
|
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |