中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: 转贴:批处理文件应用技巧 上一主题 | 下一主题
MYS
元老会员




积分 5170
发帖 1637
注册 2002-10-16
来自 广东佛山
状态 离线
『楼 主』:  转贴:批处理文件应用技巧

批处理文件应用技巧 虽然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] 其中扩展名为扩展名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 [extension1] [extenstion2] 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




我的网志 http://hzmys.blog.163.com/ 我的网盘 firststep.qjwm.com fsmys.ys168.com ssmys.ys168.com www.brsbox.com/fsmys www.brsbox.com/ssmys www.brsbox.com/ccdos
2002-10-25 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (2664429)  编辑帖子  回复  引用回复
buddiyar
初级用户





积分 160
发帖 75
注册 2006-6-28
状态 离线
『第 2 楼』:  

呵呵 收了 还是觉得对如我这样的新手还是有用处的 呵呵谢谢先啦


2006-7-12 19:34
查看资料  发送邮件  发短消息 网志  OICQ (243589543)  编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: