第七课 DOS批处理编程高级技巧.docx

上传人:b****7 文档编号:8784571 上传时间:2023-02-01 格式:DOCX 页数:24 大小:25.39KB
下载 相关 举报
第七课 DOS批处理编程高级技巧.docx_第1页
第1页 / 共24页
第七课 DOS批处理编程高级技巧.docx_第2页
第2页 / 共24页
第七课 DOS批处理编程高级技巧.docx_第3页
第3页 / 共24页
第七课 DOS批处理编程高级技巧.docx_第4页
第4页 / 共24页
第七课 DOS批处理编程高级技巧.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

第七课 DOS批处理编程高级技巧.docx

《第七课 DOS批处理编程高级技巧.docx》由会员分享,可在线阅读,更多相关《第七课 DOS批处理编程高级技巧.docx(24页珍藏版)》请在冰豆网上搜索。

第七课 DOS批处理编程高级技巧.docx

第七课DOS批处理编程高级技巧

第七章DOS批处理编程高级技巧

DOS批处理高级教程:

第一章批处理基础

∙DOS批处理高级教程:

第二章DOS循环for命令详解

∙DOS批处理高级教程:

第三章for命令中的变量

∙DOS批处理高级教程:

第四章批处理中的变量

∙DOS批处理高级教程:

第五章set命令详解

∙DOS批处理高级教程:

第六章if命令讲解

∙DOS批处理高级教程:

第七章DOS批处理编程高级技巧

一、交互界面设计

没啥说的,看看高手设计的菜单界面吧:

1.@echooff

2.cls

3.title终极多功能修复

4.:

menu

5.cls

6.color0A

7.echo.

8.echo            ==============================

9.echo            请选择要进行的操作,然后按回车

10.echo            ==============================

11.echo.

12.echo          1.网络修复及上网相关设置,修复IE,自定义屏蔽网站

13.echo.

14.echo          2.病毒专杀工具,端口关闭工具,关闭自动播放

15.echo.

16.echo          3.清除所有多余的自启动项目,修复系统错误

17.echo.

18.echo          4.清理系统垃圾,提高启动速度

19.echo.

20.echo          Q.退出

21.echo.

22.echo.

23.:

cho

24.setchoice=

25.set/pchoice=      请选择:

26.IFNOT"%choice%"==""SETchoice=%choice:

~0,1%

27.if/i"%choice%"=="1"gotoip

28.if/i"%choice%"=="2"gotosetsave

29.if/i"%choice%"=="3"gotokaiji

30.if/i"%choice%"=="4"gotoclean

31.if/i"%choice%"=="Q"gotoendd

32.echo选择无效,请重新输入

33.echo.

34.gotocho

复制代码

只要学完本教程前面的章节,上面的程序应该能看懂了。

二、if…else…条件语句

前面已经谈到,DOS条件语句主要有以下形式

IF[NOT]ERRORLEVELnumbercommand

IF[NOT]string1==string2command

IF[NOT]EXISTfilenamecommand

增强用法:

IF[/I]string1compare-opstring2command

增强用法中加上/I就不区分大小写了!

增强用法中还有一些用来判断数字的符号:

EQU-等于

NEQ-不等于

LSS-小于

LEQ-小于或等于

GTR-大于

GEQ-大于或等于

上面的command命令都可以用小括号来使用多条命令的组合,包括else子句,组合命令中可以嵌套使用条件或循环命令。

例如:

  IFEXISTfilename(

      delfilename

  )ELSE(

      echofilenamemissing

  )

也可写成:

ifexistfilename(delfilename)else(echofilenamemissing)

但这种写法不适合命令太多或嵌套命令的使用。

三、循环语句

1、指定次数循环

FOR/L%variableIN(start,step,end)DOcommand[command-parameters]

组合命令:

FOR/L%variableIN(start,step,end)DO(

Command1

Command2

……

) 

2、对某集合执行循环语句。

FOR%%variableIN(set)DOcommand[command-parameters]

  %%variable  指定一个单一字母可替换的参数。

  (set)    指定一个或一组文件。

可以使用通配符。

  command  对每个文件执行的命令,可用小括号使用多条命令组合。

FOR/R[[drive:

]path]%variableIN(set)DOcommand[command-parameters]

  检查以[drive:

]path为根的目录树,指向每个目录中的

  FOR语句。

如果在/R后没有指定目录,则使用当前

目录。

如果集仅为一个单点(.)字符,则枚举该目录树。

同前面一样,command可以用括号来组合:

FOR/R[[drive:

]path]%variableIN(set)DO(

Command1

Command2

……

commandn

3、条件循环

  上面的循环结构是用for命令来实现的,for命令循环有一个缺点,就是整个循环被当作一条命令语句,涉及到变量延迟的问题。

  利用goto语句和条件判断,dos可以实现条件循环,很简单啦,看例子:

例:

1.@echooff

2.setvar=0

3.rem************循环开始了

4.:

continue

5.set/avar+=1

6.echo第%var%次循环

7.if%var%lss100gotocontinue

8.rem************循环结束了

9.echo循环执行完毕

10.pause

复制代码

例:

1.@echooff

2.setvar=100

3.rem************循环开始了

4.:

continue

5.echo第%var%次循环

6.set/avar-=1

7.if%var%gtr0gotocontinue

8.rem************循环结束了

9.echo循环执行完毕

10.pause

复制代码

四、子程序

在批处理程序中可以调用外部可运行程序,比如exe程序,也可调用其他批处理程序,这些也可以看作子程序,但是不够方便,如果被调用的程序很多,就显得不够简明了,很繁琐。

在windowsXP中,批处理可以调用本程序中的一个程序段,相当于子程序,这些子程序一般放在主程序后面。

子程序调用格式:

CALL:

labelarguments

子程序语法:

:

label

command1

command2

......

commandn

goto:

eof

在子程序段中,参数%0指标签:

label

子过程一般放在最后,并且注意在主程序最后要加上exit或跳转语句,避免错误的进入子过程。

子程序和主程序中的变量都是全局变量,其作用范围都是整个批处理程序。

传至子程序的参数在call语句中指定,在子程序中用%1、%2至%9的形式调用,而子程序返回主程序的数据只需在调用结束后直接引用就可以了,当然也可以指定返回变量,请看下面的例子。

子程序例1:

1.@echooff

2.call:

subreturn你好

3.echo子程序返回值:

%return%

4.pause

5.

6.:

sub

7.set%1=%2

8.goto:

eof

复制代码

运行结果:

你好

子程序例2:

设计一个求多个整数相加的子程序

1.@echooff

2.setsum=0

3.call:

subsum102035

4.echo数据求和结果:

%sum%

5.pause

6.

7.:

sub

8.rem参数1为返回变量名称

9.set/a%1=%1+%2

10.shift/2

11.ifnot"%2"==""gotosub

12.goto:

eof

复制代码

运行结果:

65

在win98系统中,不支持上面这种标号调用,须将子程序单独保存为一个批处理程序,然后调用。

五、用ftp命令实现自动下载

ftp是常用的下载工具,ftp界面中有40多个常用命令,自己学习了,不介绍了。

这里介绍如何用dos命令行调用ftp命令,实现ftp自动登录,并上传下载,并自动退出ftp程序。

其实可以将ftp命令组合保存为一个文本文件,然后用以下命令调用即可。

ftp  -n-s:

[[drive:

]path]filename

上面的filename为ftp命令文件,包括登录IP地址,用户名、密码、操作命令等

例:

open90.52.8.3  #打开ip

useriware    #用户为iware

password8848  #密码

bin        #二进制传输模式

prompt

cdtmp1      #切换至iware用户下的tmp1目录

pwd

lcdd:

\download  #本地目录

mget*      #下载tmp1目录下的所有文件

bye        #退出ftp

六、用7-ZIP实现命令行压缩和解压功能

语法格式:

(详细情况见7-zip帮助文件,看得头晕可以跳过,用到再学)

7z[...][...]

7z.exe的每个命令都有不同的参数,请看帮助文件

为压缩包名称

为文件名称,支持通配符或文件列表

其中,7z是至命令行压缩解压程序7z.exe,是7z.exe包含的命令,列举如下:

a:

Addsfilestoarchive.添加至压缩包

a命令可用参数:

  -i(Include)

  -m(Method)

  -p(SetPassword)

  -r(Recurse)

  -sfx(createSFX)

  -si(useStdIn)

  -so(useStdOut)

  -ssw(Compresssharedfiles)

  -t(Typeofarchive)

  -u(Update)

  -v(Volumes)

  -w(WorkingDir)

  -x(Exclude) 

b:

Benchmark 

d:

Deletesfilesfromarchive.从压缩包中删除文件

d命令可用参数:

  -i(Include)

  -m(Method)

  -p(SetPassword)

  -r(Recurse)

  -u(Update)

  -w(WorkingDir)

  -x(Exclude) 

e:

Extract解压文件至当前目录或指定目录

e命令可用参数:

  -ai(Includearchives)

  -an(Disableparsingofarchive_name)

  -ao(Overwritemode)

  -ax(Excludearchives)

  -i(Include)

  -o(SetOutputDirectory)

  -p(SetPassword)

  -r(Recurse)

  -so(useStdOut)

  -x(Exclude)

  -y(AssumeYesonallqueries) 

l:

Listscontentsofarchive.

t:

Test 

u:

Update 

x:

eXtractwithfullpaths用文件的完整路径解压至当前目录或指定目录

x命令可用参数:

  -ai(Includearchives)

  -an(Disableparsingofarchive_name)

  -ao(Overwritemode)

  -ax(Excludearchives)

  -i(Include)

  -o(SetOutputDirectory)

  -p(SetPassword)

  -r(Recurse)

  -so(useStdOut)

  -x(Exclude)

  -y(AssumeYesonallqueries) 

七、调用VBScript程序

使用Windows脚本宿主,可以在命令提示符下运行脚本。

CScript.exe提供了用于设置脚本属性的命令行开关。

用法:

CScript脚本名称[脚本选项...][脚本参数...]

选项:

//B      批模式:

不显示脚本错误及提示信息

//D      启用ActiveDebugging

//E:

engine  使用执行脚本的引擎

//H:

CScript将默认的脚本宿主改为CScript.exe

//H:

WScript将默认的脚本宿主改为WScript.exe(默认)

//I      交互模式(默认,与//B相对)

//Job:

xxxx  执行一个WSF工作

//Logo    显示徽标(默认)

//Nologo  不显示徽标:

执行时不显示标志

//S      为该用户保存当前命令行选项

//T:

nn    超时设定秒:

允许脚本运行的最长时间

//X      在调试器中执行脚本

//U      用Unicode表示来自控制台的重定向I/O

“脚本名称”是带有扩展名和必需的路径信息的脚本文件名称,如d:

\admin\vbscripts\chart.vbs。

“脚本选项和参数”将传递给脚本。

脚本参数前面有一个斜杠(/)。

每个参数都是可选的;但不能在未指定脚本名称的情况下指定脚本选项。

如果未指定参数,则CScript将显示CScript语法和有效的宿主参数。

八、将批处理转化为可执行文件:

由于批处理文件是一种文本文件,任何人都可以对其进行随便编辑,不小心就会把里面的命令破坏掉,所以如果将其转换成.com格式的可执行文件,不仅执行效率会大大提高,而且不会破坏原来的功能,更能将优先级提到最高。

Bat2Com就可以完成这个转换工作。

小知识:

在DOS环境下,可执行文件的优先级由高到低依次为.com>.exe>.bat>.cmd,即如果在同一目录下存在文件名相同的这四类文件,当只键入文件名时,DOS执行的是,如果需要执行其他三个文件,则必须指定文件的全名,如name.bat。

这是一个只有5.43K大小的免费绿色工具,可以运行在纯DOS或DOS窗口的命令行中,用法:

Bat2ComFileName,这样就会在同一目录下生成一个名为FileN的可执行文件,执行的效果和原来的.bat文件一样。

九、时间延迟

什么是时间延迟?

顾名思义,就是执行一条命令后延迟一段时间再进行下一条命令。

延迟的应用见下节:

“模拟进度条”。

1、利用ping命令延时

例:

1.@echooff

2.echo延时前:

%time%

3.ping/n3127.0.0.1>nul

4.echo延时后:

%time%

5.pause

复制代码

解说:

用到了ping命令的“/n”参数,表示要发送多少次请求到指定的ip。

本例中要发送3次请求到本机的ip(127.0.0.1)。

127.0.0.1可简写为127.1。

“>nul”就是屏蔽掉ping命令所显示的内容。

2、利用for命令延时

例:

1.@echooff

2.echo延时前:

%time%

3.for/l%%iin(1,1,5000)doecho%%i>nul

4.echo延时后:

%time%

5.pause

复制代码

解说:

原理很简单,就是利用一个计次循环并屏蔽它所显示的内容来达到延时的目的。

3、利用vbs延迟函数,精确度毫秒,误差1000毫秒内

例:

1.@echooff

2.echo%time%

3.call:

delay5000

4.echo%time%

5.pause

6.exit

7.

8.:

delay

9.echoWScript.Sleep%1>delay.vbs

10.CScript//Bdelay.vbs

11.deldelay.vbs

12.goto:

eof

复制代码

运行显示:

10:

44:

06.45

10:

44:

11.95

请按任意键继续...

上面的运行结果显示实际延时了5500毫秒,多出来的500毫秒时建立和删除临时文件所耗费的时间。

误差在一秒之内。

4、仅用批处理命令实现任意时间延迟,精确度10毫秒,误差50毫秒内

仅用批处理命令就可以实现延迟操作。

例:

1.@echooff

2.set/pdelay=请输入需延迟的毫秒数:

3.setTotalTime=0

4.setNowTime=%time%

5.:

:

读取起始时间,时间格式为:

13:

01:

05.95

6.echo程序开始时间:

%NowTime%

7.:

delay_continue

8.set/aminute1=1%NowTime:

~3,2%-100

9.:

:

读取起始时间的分钟数

10.set/asecond1=1%NowTime:

~-5,2%%NowTime:

~-2%0-100000

11.:

:

将起始时间的秒数转为毫秒

12.setNowTime=%time%

13.set/aminute2=1%NowTime:

~3,2%-100

14.:

:

读取现在时间的分钟数

15.set/asecond2=1%NowTime:

~-5,2%%NowTime:

~-2%0-100000

16.:

:

将现在时间的秒数转为毫秒

17.set/aTotalTime+=(%minute2%-%minute1%+60)%%60*60000+%second2%-%second1%

18.if%TotalTime%lss%delay%gotodelay_continue

19.echo程序结束时间:

%time%

20.echo设定延迟时间:

%delay%毫秒

21.echo实际延迟时间:

%TotalTime%毫秒

22.pause

复制代码

运行显示:

  请输入需延迟的毫秒数:

6000

  程序开始时间:

15:

32:

16.37

  程序结束时间:

15:

32:

22.37

  设定延迟时间:

6000毫秒

  实际延迟时间:

6000毫秒

  请按任意键继续...

实现原理:

首先设定要延迟的毫秒数,然后用循环累加时间,直到累加时间大于等于延迟时间。

误差:

windows系统时间只能精确到10毫秒,所以理论上有可能存在10毫秒误差。

经测试,当延迟时间大于500毫秒时,上面的延迟程序一般不存在误差。

当延迟时间小于500毫秒时,可能有几十毫秒误差,为什么?

因为延迟程序本身也是有运行时间的,同时系统时间只能精确到10毫秒。

为了方便引用,可将上面的例子改为子程序调用形式:

1.@echooff

2.echo程序开始时间:

%Time%

3.call:

delay10

4.echo实际延迟时间:

%totaltime%毫秒

5.echo程序结束时间:

%time%

6.pause

7.exit

8.

9.:

:

-----------以下为延时子程序--------------------

10.:

delay

11.@echooff

12.if"%1"==""goto:

eof

13.setDelayTime=%1

14.setTotalTime=0

15.setNowTime=%time%

16.:

:

读取起始时间,时间格式为:

13:

01:

05.95

17.:

delay_continue

18.set/aminute1=1%NowTime:

~3,2%-100

19.set/asecond1=1%NowTime:

~-5,2%%NowTime:

~-2%0-100000

20.setNowTime=%time%

21.set/aminute2=1%NowTime:

~3,2%-100

22.set/asecond2=1%NowTime:

~-5,2%%NowTime:

~-2%0-100000

23.set/aTotalTime+=(%minute2%-%minute1%+60)%%60*60000+%second2%-%second1%

24.if%TotalTime%lss%DelayTime%gotodelay_continue

25.goto:

eof

复制代码

十、模拟进度条

下面给出一个模拟进度条的程序。

如果将它运用在你自己的程序中,可以使你的程序更漂亮。

1.@echooff

2.modeconcols=113lines=15&color9f

3.cls

4.echo.

5.echo  程序正在初始化... 

6.echo.

7.echo  ┌──────────────────────────────────────┐

8.set/p=  ■

9.for/L%%iin(1138)doset/pa=■nul

10.echo  100%%

11.echo  └──────────────────────────────────────┘

12.pause

复制代码

解说:

“set/pa=■

只显示提示信息“■”且不换行,也不需手工输入任何信息,这样可以使每个“■”在同一行逐个输出。

“ping/n0127.1>nul”是输出每个“■”的时间间隔,即每隔多少时间输出一个“■”。

十一、特殊字符的输入及应用

开始->运行->输入cmd->edit->ctr

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 商业计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1