第七课 DOS批处理编程高级技巧Word格式文档下载.docx
- 文档编号:21920753
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:24
- 大小:25.39KB
第七课 DOS批处理编程高级技巧Word格式文档下载.docx
《第七课 DOS批处理编程高级技巧Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《第七课 DOS批处理编程高级技巧Word格式文档下载.docx(24页珍藏版)》请在冰豆网上搜索。
请选择:
26.IFNOT"
%choice%"
=="
"
SETchoice=%choice:
~0,1%
27.if/i"
1"
gotoip
28.if/i"
2"
gotosetsave
29.if/i"
3"
gotokaiji
30.if/i"
4"
gotoclean
31.if/i"
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可以用括号来组合:
]path]%variableIN(set)DO(
commandn
)
3、条件循环
上面的循环结构是用for命令来实现的,for命令循环有一个缺点,就是整个循环被当作一条命令语句,涉及到变量延迟的问题。
利用goto语句和条件判断,dos可以实现条件循环,很简单啦,看例子:
例:
2.setvar=0
3.rem************循环开始了
continue
5.set/avar+=1
6.echo第%var%次循环
7.if%var%lss100gotocontinue
8.rem************循环结束了
9.echo循环执行完毕
10.pause
2.setvar=100
5.echo第%var%次循环
6.set/avar-=1
7.if%var%gtr0gotocontinue
四、子程序
在批处理程序中可以调用外部可运行程序,比如exe程序,也可调用其他批处理程序,这些也可以看作子程序,但是不够方便,如果被调用的程序很多,就显得不够简明了,很繁琐。
在windowsXP中,批处理可以调用本程序中的一个程序段,相当于子程序,这些子程序一般放在主程序后面。
子程序调用格式:
CALL:
labelarguments
子程序语法:
:
label
command1
command2
......
goto:
eof
在子程序段中,参数%0指标签:
子过程一般放在最后,并且注意在主程序最后要加上exit或跳转语句,避免错误的进入子过程。
子程序和主程序中的变量都是全局变量,其作用范围都是整个批处理程序。
传至子程序的参数在call语句中指定,在子程序中用%1、%2至%9的形式调用,而子程序返回主程序的数据只需在调用结束后直接引用就可以了,当然也可以指定返回变量,请看下面的例子。
子程序例1:
2.call:
subreturn你好
3.echo子程序返回值:
%return%
4.pause
5.
6.:
sub
7.set%1=%2
8.goto:
运行结果:
你好
子程序例2:
设计一个求多个整数相加的子程序
2.setsum=0
3.call:
subsum102035
4.echo数据求和结果:
%sum%
5.pause
6.
7.:
8.rem参数1为返回变量名称
9.set/a%1=%1+%2
10.shift/2
11.ifnot"
%2"
gotosub
12.goto:
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<
command>
[<
switch>
...]<
base_archive_name>
arguments>
...]
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命令可用参数:
e:
Extract解压文件至当前目录或指定目录
e命令可用参数:
-ai(Includearchives)
-an(Disableparsingofarchive_name)
-ao(Overwritemode)
-ax(Excludearchives)
-o(SetOutputDirectory)
-x(Exclude)
-y(AssumeYesonallqueries)
l:
Listscontentsofarchive.
t:
Test
u:
Update
x:
eXtractwithfullpaths用文件的完整路径解压至当前目录或指定目录
x命令可用参数:
七、调用VBScript程序
使用Windows脚本宿主,可以在命令提示符下运行脚本。
CScript.exe提供了用于设置脚本属性的命令行开关。
用法:
CScript脚本名称[脚本选项...][脚本参数...]
选项:
//B
批模式:
不显示脚本错误及提示信息
//D
启用ActiveDebugging
//E:
engine
使用执行脚本的引擎
//H:
CScript将默认的脚本宿主改为CScript.exe
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命令延时
2.echo延时前:
%time%
3.ping/n3127.0.0.1>
nul
4.echo延时后:
解说:
用到了ping命令的“/n”参数,表示要发送多少次请求到指定的ip。
本例中要发送3次请求到本机的ip(127.0.0.1)。
127.0.0.1可简写为127.1。
“>
nul”就是屏蔽掉ping命令所显示的内容。
2、利用for命令延时
3.for/l%%iin(1,1,5000)doecho%%i>
原理很简单,就是利用一个计次循环并屏蔽它所显示的内容来达到延时的目的。
3、利用vbs延迟函数,精确度毫秒,误差1000毫秒内
2.echo%time%
delay5000
4.echo%time%
6.exit
7.
8.:
delay
9.echoWScript.Sleep%1>
delay.vbs
10.CScript//Bdelay.vbs
11.deldelay.vbs
运行显示:
10:
44:
06.45
11.95
请按任意键继续...
上面的运行结果显示实际延时了5500毫秒,多出来的500毫秒时建立和删除临时文件所耗费的时间。
误差在一秒之内。
4、仅用批处理命令实现任意时间延迟,精确度10毫秒,误差50毫秒内
仅用批处理命令就可以实现延迟操作。
2.set/pdelay=请输入需延迟的毫秒数:
3.setTotalTime=0
4.setNowTime=%time%
5.:
读取起始时间,时间格式为:
13:
01:
05.95
6.echo程序开始时间:
%NowTime%
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:
14.:
读取现在时间的分钟数
15.set/asecond2=1%NowTime:
16.:
将现在时间的秒数转为毫秒
17.set/aTotalTime+=(%minute2%-%minute1%+60)%%60*60000+%second2%-%second1%
18.if%TotalTime%lss%delay%gotodelay_continue
19.echo程序结束时间:
20.echo设定延迟时间:
%delay%毫秒
21.echo实际延迟时间:
%TotalTime%毫秒
22.pause
请输入需延迟的毫秒数:
6000
程序开始时间:
15:
32:
16.37
程序结束时间:
22.37
设定延迟时间:
6000毫秒
实际延迟时间:
实现原理:
首先设定要延迟的毫秒数,然后用循环累加时间,直到累加时间大于等于延迟时间。
误差:
windows系统时间只能精确到10毫秒,所以理论上有可能存在10毫秒误差。
经测试,当延迟时间大于500毫秒时,上面的延迟程序一般不存在误差。
当延迟时间小于500毫秒时,可能有几十毫秒误差,为什么?
因为延迟程序本身也是有运行时间的,同时系统时间只能精确到10毫秒。
为了方便引用,可将上面的例子改为子程序调用形式:
2.echo程序开始时间:
%Time%
delay10
4.echo实际延迟时间:
%totaltime%毫秒
5.echo程序结束时间:
6.pause
7.exit
8.
-----------以下为延时子程序--------------------
10.:
11.@echooff
12.if"
%1"
goto:
13.setDelayTime=%1
14.setTotalTime=0
15.setNowTime=%time%
17.:
18.set/aminute1=1%NowTime:
19.set/asecond1=1%NowTime:
20.setNowTime=%time%
21.set/aminute2=1%NowTime:
22.set/asecond2=1%NowTime:
23.set/aTotalTime+=(%minute2%-%minute1%+60)%%60*60000+%second2%-%second1%
24.if%TotalTime%lss%DelayTime%gotodelay_continue
25.goto:
十、模拟进度条
下面给出一个模拟进度条的程序。
如果将它运用在你自己的程序中,可以使你的程序更漂亮。
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&
ping/n1127.0.0.1>
100%%
11.echo
└──────────────────────────────────────┘
12.pause
“set/pa=■<
nul”的意思是:
只显示提示信息“■”且不换行,也不需手工输入任何信息,这样可以使每个“■”在同一行逐个输出。
“ping/n0127.1>
nul”是输出每个“■”的时间间隔,即每隔多少时间输出一个“■”。
十一、特殊字符的输入及应用
开始->
运行->
输入cmd->
edit->
ctr
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第七课 DOS批处理编程高级技巧 第七 DOS 批处理 编程 高级 技巧
![提示](https://static.bdocx.com/images/bang_tan.gif)