批处理bat详细教程 完整版.docx

上传人:b****7 文档编号:9838452 上传时间:2023-02-07 格式:DOCX 页数:20 大小:22.24KB
下载 相关 举报
批处理bat详细教程 完整版.docx_第1页
第1页 / 共20页
批处理bat详细教程 完整版.docx_第2页
第2页 / 共20页
批处理bat详细教程 完整版.docx_第3页
第3页 / 共20页
批处理bat详细教程 完整版.docx_第4页
第4页 / 共20页
批处理bat详细教程 完整版.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

批处理bat详细教程 完整版.docx

《批处理bat详细教程 完整版.docx》由会员分享,可在线阅读,更多相关《批处理bat详细教程 完整版.docx(20页珍藏版)》请在冰豆网上搜索。

批处理bat详细教程 完整版.docx

批处理bat详细教程完整版

一、交互界面设计

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

@echooff

cls

title终极多功能修复

:

menu

cls

color0A

echo.

echo==============================

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

echo==============================

echo.

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

echo.

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

echo.

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

echo.

echo4.清理系统垃圾,提高启动速度

echo.

echoQ.退出

echo.

echo.

:

cho

setchoice=

set/pchoice=请选择:

IFNOT"%choice%"==""SETchoice=%choice:

~0,1%

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

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

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

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

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

echo选择无效,请重新输入

echo.

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可以实现条件循环,很简单啦,看例子:

例:

@echooff

setvar=0

rem************循环开始了

:

continue

set/avar+=1

echo第%var%次循环

if%var%lss100gotocontinue

rem************循环结束了

echo循环执行完毕

pause

例:

@echooff

setvar=100

rem************循环开始了

:

continue

echo第%var%次循环

set/avar-=1

if%var%gtr0gotocontinue

rem************循环结束了

echo循环执行完毕

pause

四、子程序

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

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

子程序调用格式:

CALL:

labelarguments

子程序语法:

:

label

command1

command2

......

commandn

goto:

eof

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

label

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

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

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

子程序例1:

@echooff

call:

subreturn你好

echo子程序返回值:

%return%

pause

:

sub

set%1=%2

goto:

eof

运行结果:

你好

子程序例2:

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

@echooff

setsum=0

call:

subsum102035

echo数据求和结果:

%sum%

pause

:

sub

rem参数1为返回变量名称

set/a%1=%1+%2

shift/2

ifnot"%2"==""gotosub

goto:

eof

运行结果:

65

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

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

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

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

ftp-n-s:

[[drive:

]path]filename

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

例:

open#打开ip

useriware#用户为iware

password8848#密码

bin#二进制传输模式

prompt

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

pwd

lcdd:

\download#本地目录

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

bye#退出ftp

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

语法格式:

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

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

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

为压缩包名称

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

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

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)

七、调用VB******程序

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

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

用法:

C******脚本名称[脚本选项...][脚本参数...]

选项:

xe

xe(默认)

xe>.bat>.cmd,即如果在同一目录下存在文件名相同的这四类文件,当只键入文件名时,DOS执行的是,如果需要执行其他三个文件,则必须指定文件的全名,如。

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

Bat2Com

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

九、时间延迟

本条参考引用[英雄]教程

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

延迟的应用见下节:

“模拟进度条”。

1、利用ping命令延时

例:

@echooff

echo延时前:

%time%

ping/n3>nul

echo延时后:

%time%

pause

解说:

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

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

可简写为。

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

2、利用for命令延时

例:

@echooff

echo延时前:

%time%

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

echo延时后:

%time%

pause

解说:

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

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

例:

@echooff

echo%time%

call:

delay5000

echo%time%

pause

exit

:

delay

echoW******.Sleep%1>

C******..

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

误差在一秒之内。

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

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

例:

@echooff

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

setTotalTime=0

setNowTime=%time%

:

:

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

13:

01:

echo程序开始时间:

%NowTime%

:

delay_continue

set/aminute1=1%NowTime:

~3,2%-100

:

:

读取起始时间的分钟数

set/asecond1=1%NowTime:

~-5,2%%NowTime:

~-2%0-100000

:

:

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

setNowTime=%time%

set/aminute2=1%NowTime:

~3,2%-100

:

:

读取现在时间的分钟数

set/asecond2=1%NowTime:

~-5,2%%NowTime:

~-2%0-100000

:

:

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

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

if%TotalTime%lss%delay%gotodelay_continue

echo程序结束时间:

%time%

echo设定延迟时间:

%delay%毫秒

echo实际延迟时间:

%TotalTime%毫秒

pause

运行显示:

请输入需延迟的毫秒数:

6000

程序开始时间:

15:

32:

程序结束时间:

15:

32:

设定延迟时间:

6000毫秒

实际延迟时间:

6000毫秒

请按任意键继续...

实现原理:

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

误差:

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

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

当延迟时间小于500毫秒时,可能有几十毫秒误差,为什么因为延迟程序本身也是有运行时间的,同时系统时间只能精确到10毫秒。

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

@echooff

echo程序开始时间:

%Time%

call:

delay10

echo实际延迟时间:

%totaltime%毫秒

echo程序结束时间:

%time%

pause

exit

:

:

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

:

delay

@echooff

if"%1"==""goto:

eof

setDelayTime=%1

setTotalTime=0

setNowTime=%time%

:

:

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

13:

01:

:

delay_continue

set/aminute1=1%NowTime:

~3,2%-100

set/asecond1=1%NowTime:

~-5,2%%NowTime:

~-2%0-100000

setNowTime=%time%

set/aminute2=1%NowTime:

~3,2%-100

set/asecond2=1%NowTime:

~-5,2%%NowTime:

~-2%0-100000

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

if%TotalTime%lss%DelayTime%gotodelay_continue

goto:

eof

十、模拟进度条

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

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

@echooff

modeconcols=113lines=15&color9f

cls

echo.

echo程序正在初始化...

echo.

echo┌──────────────────────────────────────┐

set/p=■

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

echo100%%

echo└──────────────────────────────────────┘

pause

解说:

“set/pa=■

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

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

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

开始->运行->输入cmd->edit->ctrl+p(意思是允许输入特殊字符)->按ctrl+a将会显示笑脸图案。

(如果要继续输入特殊字符请再次按ctrl+p,然后ctrl+某个字母)

以上是特殊字符的输入方法,选自[英雄]教程,很管用的。

也就是用编辑程序edit输入特殊字符,然后保存为一文本文件,再在windows下打开此文件,复制其中的特殊符号即可。

一些简单的特殊符号可以在dos命令窗口直接输入,并用重定向保存为文本文件。

例:

C:

>ECHO^G>

“^G”是用Ctrl+G或Alt+007输入,输入多个^G可以产生多声鸣响。

特殊字符的应用也很有意思,这里仅举一例:

退格键

退格键表示删除左边的字符,此键不能在文档中正常输入,但可以通过edit编辑程序录入并复制出来。

即“”。

利用退格键,可以设计闪烁文字效果

例:

文字闪烁

@echooff

:

start

set/p=床前明月光

:

:

显示文字,光标停于行尾

ping-n0

:

:

设置延迟时间

set/pa=

:

:

输出一些退格符将光标置于该行的最左端(退格符的数量可以自己调整)。

set/pa=

:

:

输出空格将之前输出的文字覆盖掉。

set/pa=

:

:

再次输出退格符将光标置于该行的最左端,这里的退格符数量一定不能比前面的空格数少。

:

:

否则光标不能退到最左端。

gotostart

例:

输出唐诗一首,每行闪动多次

@echooff

setlocalenabledelayedexpansion

setstr=床前明月光疑是地上霜举头望明月低头思故乡

:

:

定义字符串str

for%%iin(%str%)do(

rem由于str中含有空格,则以空格为分隔符将str中的每一个部分依次赋给变量%%i。

setchar=%%i

echo.

echo.

for/l%%jin(0,1,5)do(

set/p=!

char:

~%%j,1!

rem依次取出变量char中的每一个字符,并显示。

ping-n0

rem设置输出每个字符的时间延迟。

call:

hero%%i

pause>nul

exit

:

hero

for/l%%kin(1,1,10)do(

ping/n0

set/pa=

set/pa=

set/pa=

ping/n0

set/pa=%1

:

:

文字闪动

goto:

eof

十二、随机数(%random%)的应用技巧

%RANDOM%系统变量返回0到32767之间的任意十进制数字。

由生成。

2的15次方等于32768,上面的0~32767实际就是15位二进制数的范围。

那么,如何获取100以内的随机数呢很简单,将%RANDOM%按100进行求余运算即可,见例子。

例:

生成5个100以内的随机数

@echooff

setlocalenabledelayedexpansion

for/L%%iin(115)do(

set/arandomNum=!

random!

%%100

echo随机数:

!

randomNum!

pause

运行结果:

(每次运行不一样)

随机数:

91

随机数:

67

随机数:

58

随机数:

26

随机数:

20

请按任意键继续...

求余数运算set/arandomNum=!

random!

%%100中的100可以是1~32768之间的任意整数。

总结:

利用系统变量%random%,求余数运算%%,字符串处理等,可以实现很多随机处理。

思考题目:

生成给定位数的随机密码

解答思路:

将26个英文字母或10数字以及其它特殊字符组成一个字符串,随机抽取其中的若干字符。

参考答案1:

(简单)

@echooff

call:

randomPassword5pass1pass2

echo%pass1%%pass2%

pause

exit

:

randomPassword

:

:

---------生成随机密码

:

:

---------%1为密码长度,%2及以后为返回变量名称

:

:

---------for命令最多只能区分31个字段

@echooff

setpassword_len=%1

ifnotdefinedpassword_lengoto:

eof

if%password_len

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

当前位置:首页 > 总结汇报 > 学习总结

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

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