BAT批处理文件编写详细手册范本.docx

上传人:b****5 文档编号:5754446 上传时间:2022-12-31 格式:DOCX 页数:19 大小:25.94KB
下载 相关 举报
BAT批处理文件编写详细手册范本.docx_第1页
第1页 / 共19页
BAT批处理文件编写详细手册范本.docx_第2页
第2页 / 共19页
BAT批处理文件编写详细手册范本.docx_第3页
第3页 / 共19页
BAT批处理文件编写详细手册范本.docx_第4页
第4页 / 共19页
BAT批处理文件编写详细手册范本.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

BAT批处理文件编写详细手册范本.docx

《BAT批处理文件编写详细手册范本.docx》由会员分享,可在线阅读,更多相关《BAT批处理文件编写详细手册范本.docx(19页珍藏版)》请在冰豆网上搜索。

BAT批处理文件编写详细手册范本.docx

BAT批处理文件编写详细手册范本

BAT〔批处理〕文件编写详细手册

一、批处理文件简介

首先,批处理文件是一个文本文件,这个文件的每一行都是一条DOS命令〔大局部时候就好象我们在DOS提示符下执行的命令行一样〕,你可以使用DOS下的Edit或者Windows的记事本(notepad)等任何文本文件编辑工具创建和修改批处理文件。

其次,批处理文件是一种简单的程序,可以通过条件语句(if)和流程控制语句(goto)来控制命令运行的流程,在批处理中也可以使用循环语句(for)来循环执行一条命令。

当然,批处理文件的编程能力与C语言等编程语句比起来是十分有限的,也是十分不规X的。

批处理的程序语句就是一条条的DOS命令〔包括内部命令和外部命令〕,而批处理的能力主要取决于你所使用的命令。

第三,每个编写好的批处理文件都相当于一个DOS的外部命令,你可以把它所在的目录放到你的DOS搜索路径(path)中来使得它可以在任意位置运行。

一个良好的习惯是在硬盘上建立一个bat或者batch目录〔例如C:

/BATCH〕,然后将所有你编写的批处理文件放到该目录中,这样只要在path中设置上c:

/batch,你就可以在任意位置运行所有你编写的批处理程序。

简单的说,批处理的作用就是自动的连续执行多条命令。

二、批处理中常用命令:

1.echo命令:

表示显示此命令后的字符。

字符不需要使用引号。

其中,%和^两个字符不能显示。

2.Echooff命令:

表示在此语句后所有运行的命令都不显示命令行本身。

即关闭echo回显功能。

可以使用echoon打开。

3.命令:

它是加在每个命令行的最前面,表示运行时不显示这一行的命令行〔只能影响当前行〕。

4.call命令:

调用另一个批处理文件〔如果不用call而直接调用别的批处理文件,那么执行完那个批处理文件后将无法返回当前文件并执行当前文件的后续命令〕。

5.pause命令:

运行此句会暂停批处理的执行并在屏幕上显示Pressanykeytocontinue...的提示,等待用户按任意键后继续。

如果不想显示以上英文提示信息,可以这样写:

pause>null

6.rem命令:

表示此命令后的字符为解释行〔注释〕,不执行,只是给自己今后参考用的〔相当于程序中的注释〕。

7.:

:

命令:

与rem命令等效。

例1:

用edit编辑文件,输入如下内容后存盘为,执行该批处理文件后可实现:

将根目录中所有文件写入中,启动UCDOS,进入WPS等功能。

  批处理文件的内容为:

命令注释:

echooff//不显示后续命令行与当前命令行

//将c盘文件列表写入a.txt

//调用ucdos

echo你好//显示"你好"

pause//暂停,等待按键继续

rem准备运行wps//注释:

准备运行wps

cducdos//进入ucdos目录

wps//运行wps

三、批处理文件的参数:

批处理文件还可以像C语言的函数一样使用参数〔相当于DOS命令的命令行参数〕,这需要用到一个参数表示符"%"。

%[1-9]表示参数,参数是指在运行批处理文件时在文件名后加的以空格〔或者Tab〕分隔的字符串。

变量可以从%0到%9,%0表示批处理命令本身,其它参数字符串用%1到%9顺序表示。

例2:

C:

根目录下有一批处理文件名为,内容为:

echooff

format%1

如果执行C:

/>fa:

那么在执行时,%1就表示a:

,这样format%1就相当于formata:

,于是上面的命令运行时实际执行的是formata:

例3:

C:

根目录下一批处理文件名为,内容为:

echooff

type%1

type%2

那么运行

%1:

表示

%2:

表示

于是上面的命令将顺序地显示和文件的内容。

%0这个不是返回参数的值了,他有两层意思!

第一层意思:

返回批处理所在绝对路径

例子:

echooff

echo%0

pause

保存为放在桌面运行,会显示如下结果

"C:

\DocumentsandSettings\Administrator\桌面\test.bat"

他把当前批处理执行的所在路经打印出来了,这就是返回批处理所在绝对路径的意思

第二层意思:

无限循环执行BAT

例子:

echooff

netuser

%0

保存为BAT执行,他就会无限循环执行netuser这条命令,直到你手动停止.

%*参数:

返回参数,不过他是一次返回全部参数,不用分别%1,%2等一一返回。

例子

echooff

echo%*

同样保存为test.bat放到C盘

进入CMD,输入cdc:

\

然后输入test.bat我是第一个参数我是第二个参数我是第三个参数我是第四个参数

可以看到他一次把全部参数都显示出来了

四、自定义变量:

自定义变量使用set命令。

如:

echooff

setvar=value//有空格的字符串也不需要引号。

echo%var%

pause

其中var就是自定义的变量。

五、特殊命令

(一)if命令

if是条件语句,用来判断是否符合规定的条件,从而决定执行不同的命令。

有三种格式:

1.if[not]"参数"=="字符串"待执行的命令

//注意:

为了防止参数为空的情况,一般会将参数与字符串用双引号〔或者其它符号,注意不能使用保存符号〕括起来。

如:

if[%1]==[A]或者if%1*==A*,这里*不是通配符。

是要保证等号两边的字符一致。

参数如果等于(not表示不等,下同)指定的字符串,如此条件成立,运行命令,否如此运行下一句。

例:

if"%1"=="a"formata:

2.if[not]exist[路径/]文件名待执行的命令

如果有指定的文件,如此条件成立,运行命令,否如此运行下一句。

如//表示如果存在文件,如此显示它的内容。

3.iferrorlevel<数字>待执行的命令

很多DOS程序在运行完毕后会返回一个数字值用来表示程序运行的结果(或者状态),通过iferrorlevel命令可以判断程序的返回值,根据不同的返回值来决定执行不同的命令(返回值必须按照从大到小的顺序排列)。

如果返回值等于指定的数字,如此条件成立,运行命令,否如此运行下一句。

IF ERRORLEVEL 是用来测试它的上一个DOS命令的返回值的,注意只是上一个命令的返回值,而且返回值必须依照从大到小次序顺序判断。

如下的例子,先判断返回值为1的,再判断返回值为0的。

 

IF ERRORLEVEL 1 ECHO 文件拷贝失败 

IF ERRORLEVEL 0 ECHO 成功拷贝文件 

如iferrorlevel2gotox2

4.ifnumber比拟符valuemand

EQU等于

NEQ不等于

LSS小于

LEQ小于或等于

GTR大于

GEQ大于或等于

5.ifdefinedtestmand//如果定了了变量test,如此执行mand。

如:

ifdefinedtestechoItisdefined.

6.if条件1(mand1)else(mand2)//条件1后的命令行必须有括号。

在if后,假设要执行多条命令,可以将这些命令放在一对括号中,且左括号必须跟if关键字在同一行,如:

cd/d:

/slfslfsl

iferrorlevel1(

mkdird:

\error

mkdird:

\1

mkdird:

\2)

(二)goto命令

批处理文件运行到这里将跳到goto所指定的标号(标号即label,标号用:

后跟标准字符串来定义)处,goto语句一般与if配合使用,根据不同的条件来执行不同的命令组。

如:

gotoend

:

end

echothisistheend

标号用":

字符串"来定义,标号所在行不被执行。

在有多个标号时,每个标号都要有goto语句跳出,否如此各个标号程序会连续执行。

注意:

(1)标号前是ASCII字符的冒号":

",冒号与标号之间不能有空格。

(2)标号的命名规如此与文件名的命名规如此一样。

(3)DOS支持最长八位字符的标号,当无法区别两个标号时,将跳转至最近的一个标号。

(三)choice命令

使用此命令可以让用户输入一个字符〔用于选择〕,从而根据用户的选择返回不同的errorlevel,然后于iferrorlevel配合,根据用户的选择运行不同的命令。

注意:

choice命令为DOS或者Windows系统提供的外部命令,不同版本的choice命令语法会稍有不同,请用choice/?

查看用法。

choice的命令语法〔该语法为Windows2003中choice命令的语法,其它版本的choice的命令语法与此某某小异〕:

CHOICE[/Cchoices][/N][/CS][/Ttimeout/Dchoice][/Mtext]

描述:

该工具允许用户从选择列表选择一个项目并返回所选项目的索引。

参数列表:

/Cchoices指定要创建的选项列表。

默认列表是"YN"。

//即定义可选择项

/N在提示符中隐藏选项列表。

提示前面的消息得到显示,选项依旧处于启用状态。

//即[Y,N,C]?

列表将隐藏,但提示用户选择的信息将正常显示。

另外,/N必须用于/M参数之前。

/CS允许选择分大小写的选项。

在默认情况下,这个工具是不分大小写的。

/Ttimeout做出默认选择之前,暂停的秒数。

可承受的值是从0到9999。

如果指定了0,就不会有暂停,默认选项

           会得到选择。

/Dchoice 在nnnn秒之后指定默认选项。

字符必须在用/C选项指定的一组选择中;同时,必须用/T指定nnnn。

/Mtext指定提示之前要显示的消息。

如果没有指定,工具只显示提示。

/?

显示帮助消息。

 注意:

ERRORLEVEL环境变量被设置为从选择集选择的键索引。

列出的第一个选择返回1,第二个选择返回2,等等。

如果用户按的键不是有效的选择,该工具会发出警告响声。

如果该工具检测到错误状态,它会返回255的ERRORLEVEL值。

如果用户按Ctrl+Break或Ctrl+C键,该工具会返回0的ERRORLEVEL值。

在一个批程序中使用ERRORLEVEL参数时,将参数降序排列。

示例:

CHOICE/?

CHOICE/CYNC/M"确认请按Y,否请按N,或者取消请按C。

"

CHOICE/T10/Cync/CS/Dy

CHOICE/Cab/M"选项1请选择a,选项2请选择b。

"

CHOICE/Cab/N/M"选项1请选择a,选项2请选择b。

"

如果我运行命令:

CHOICE/CYNC/M"确认请按Y,否请按N,或者取消请按C。

"

屏幕上会显示:

确认请按Y,否请按N,或者取消请按C。

[Y,N,C]?

例:

的内容如下〔注意,用iferrorlevel判断返回值时,要按返回值从高到低排列〕:

echooff

choice/Cdme/M"defrag,mem,end"

iferrorlevel3gotoend

iferrorlevel2gotomem

iferrotlevel1gotodefrag

:

defrag

c:

/dos/defrag

gotoend

:

mem

mem

gotoend

:

end

echogoodbye

注:

如果在bat文件中出现外部程序,需要知道绝对路径,并需要用引号。

如:

“C:

\ProgramFiles(x86)\MicrosoftOffice\Office14〞

此批处理运行后,将显示"defrag,mem,end[D,M,E]?

",用户可选择dme,然后if语句根据用户的选择作出判断,d表示执行标号为defrag的程序段,m表示执行标号为mem的程序段,e表示执行标号为end的程序段,每个程序段最后都以gotoend将程序跳到end标号处,然后程序将显示goodbye,批处理运行完毕。

(四)for命令:

(参考)

对一个或一组文件,字符串或命令结果中的每一个对象执行特定命令,达到我们想要的结果。

  

注意:

在批处理文件中使用 FOR 命令时,指定变量请使用 %%variable,而不要用 %variable。

变量名称是区分大小写的,所以 %i 不同于 %I。

语法:

FOR [参数] %%变量名 IN (相关文件或命令)   DO 执行的命令

for命令可以带参数或不带参数,带参数时支持以下参数:

/d /l /r /f  语法:

1.不带参数:

FOR%%variableIN(set)DOmand[mand-parameters]

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

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

可以使用通配符。

//不带参数时,只指文件。

mand指定对每个文件执行的命令。

mand-parameters为特定命令指定参数或命令行开关。

DO后面可以跟if等其他命令,需要用()括起来。

示例:

for %%i in (t*.*) do echo %%i --显示当前目录下与t*.*相匹配的文件(只显示文件名,不显示路径)   

for %%i in (d:

\mydocuments\*.doc) do echo %%i --显示d:

\mydocuments\目录下与*.doc相匹配的文件  

2.带有参数时:

(1)参数 /d (参数只能显示当前目录下的目录名字)

格式:

FOR /D %variable IN (set) DO mand [mand-parameters]

这个参数主要用于目录搜索,不会搜索文件,/D 参数只能显示当前目录下的目录名字。

(特别说明:

只会搜索指定目录下的目录,不会搜索再下一级的目录。

)  

for /d %%i in (c:

\*) do echo %%i  --显示c盘根目录下的所有目录  

for /d %%i in (?

?

?

) do echo %%i  --显示当前目录下名字只有1-3个字母的目录 

(2)参数 /R (搜索指定路径与所有子目录中与set相符合的所有文件)

格式:

FOR /R [[drive:

]path] %variable IN (set) DO mand [mand-parameters]  

此命令会搜索指定路径与所有子目录中与set相符合的所有文件,注意是指定路径与所有子目录。

set中的文件名如果含有通配符(?

或*),如此列举/R参数指定的目录与其下面的所有子目录中与set相符合的所有文件,无相符文件的目录如此不列举。

 

如果set中为具体文件名,不含通配符,如此枚举该目录树〔即列举该目录与其下面的所有子目录〕(并在后面加上具体的文件名),而不管set中的指定文件是否存在。

示例:

for/rc:

\%%iin(boot.ini)doecho%%i--枚举了c盘所有目录,没有通配符,命令结果会将文件名自动见到c:

\下所有的目录下,并显示出来。

for/rc:

\%%iin(boot*.ini)doecho%%i--包括了通配符,只列举出保护符合通配符的文件所在的目录。

for/rd:

\backup%%iin

(1)doecho%%i--枚举d\backup目录

for/rc:

\%%iin(boot.ini)doifexist%%iecho%%i--很好的搜索命令,列举存在的目录

(3)参数 /L (该集表示以增量形式从开始到完毕的一个数字序列。

可以使用负的 Step)

格式:

FOR /L %variable IN (start,step,end) DO mand [mand-parameters]

for/l%%iin(1,1,5)doecho%%i--输出12345//从1开始,递增1,最大值为5

for/l%%iin(1,2,10)doecho%%i--输出1,3,5,7,9

for/l%%iin(100,-20,1)doecho%%i--输出100,80,60,40,20

for/l%%iin(1,1,5)dostartcmd--打开5个CMD窗口

for/l%%iin(1,1,5)domd%%i--建立从1~5共5个文件夹

for/l%%iin(1,1,5)dord/q%%i--删除从1~5共5个文件夹

(4)参数/F(主要用来处理文件内容或命令的输出结果,/F默认将每行作为一个元素来处理。

格式:

FOR/F["options"]%%iIN(file)DOmand//file代表一个或多个文件。

for会依次将file中的文件打开,并且在进展到下一个文件之前将每个文件读取到内存,将每行作为一个的元素,%%i代表这个元素。

忽略空白的行。

FOR/F["options"]%%iIN("string")DOmand//string代表字符串

FOR/F["options"]%%iIN('mand')DOmand//mand代表命令。

命令行需要用单引号。

["options"]可选

假设文件中有如下内容:

第1行第1列第1行第2列第1行第3列第2行第1列第2行第2列第2行第3列第3行第1列第3行第2列第3行第3列

你想显示中的内容,会用什么命令呢?

当然是type,

for也可以完成同样的命令:

for/f"tokens=*"%%iin(a.txt)doecho%%i

还是先从括号执行,因为含有参数/f,所以for会先打开,然后读出里面的所有内容,把它作为一个集合,并且以每一行作为一个元素,所以会产生这样的集合:

{"第1行第1列第1行第2列第1行第3列",//第一个元素

"第2行第1列第2行第2列第2行第3列",//第二个元素

"第3行第1列第3行第2列第3行第3列"}  //第三个元素

集合中只有3个元素,同样用%%i依次代替每个元素,然后执行do后面的命令。

tokens参数后面在描述。

具体过程:

用%%i代替"第1行第1列第1行第2列第1行第3列",执行do后面的echo%%i,显示"第1行第1列第1行第2列第1行第3列",

用%%i代替"第2行第1列第2行第2列第2行第3列",执行echo%%i,显示"第2行第1列第2行第2列第2行第3列",

依次,直到每个元素都代替完为止。

为了加强理解/f的作用,请执行一下两个命令,比照即可明白:

for/f%%iin(a.txt)doecho%%i//这个会显示里面的内容,因为/f的作用,会读出中的内容。

for%%iin(a.txt)doecho%%i//而这个只会显示这个名字,并不会读取其中的内容。

通过上面的学习,我们发现for/f会默认以每一行来作为一个元素,但是如果我们还想把每一行再分解更小的内容,该怎么办呢?

不用担心,for命令还为我们提供了更详细的参数,使我们将每一行分为更小的元素成为可能。

它们就是:

delims和tokens参数

(4.1)delims:

用来告诉for每一行应该拿什么作为分隔符,默认的分隔符是空格和tab键。

比如,还是上面的文件,我们执行下面的命令:

for/f"delims="%%iin(a.txt)doecho%%i

显示的结果是:

第1行第1列第2行第1列第3行第1列

为什么是这样的呢。

因为这里有了delims这个参数,=后面有一个空格,意思是再将每个元素以空格分割,默认是只取分割之后的第一个元素。

执行过程是:

将第一个元素"第1行第1列第1行第2列第1行第3列"分成三个元素:

"第1行第1列""第1行第2列""第1行第3列",它默认只取第一个,即"第1行第1列",然后执行do后面的命令,依次类推。

(4.2)tokens参数:

它的作用就是当你通过delims将每一行分为更小的元素时,由它来控制要取哪一个或哪几个。

还是上面的例子,执行如下命令:

for/f"tokens=2delims="%%iin(a.txt)doecho%%i

执行结果:

第1行第2列第2行第2列第3行第2列

如果要显示第三列,那就换成tokens=3。

如果要显示第二列和第三列,如此换成tokens=2,3或tokens=2-3,如果还有更多的如此为:

tokens=2-10之类的。

但参数的个数要相应的增加。

此时的命令为:

for/f"tokens=2,3delims="%%iin(a.txt)doecho%%i%%j

delims指定在每行中,用空格作为分隔符,取每行的第2和第3和元素。

用%%i代替第2个元素,%%j代替第3个元素。

参数必须是按照英文字母顺序排列的,%%j不能换成%%k,因为i后面是j

执行结果为:

第1行第2列第1行第3列第2行第2列第2行第3列第3行第2列第3行第3列

(4.3)对于通配符*,就是把这一行全部或者这一行的剩余局部当作一个元素了。

比如:

for/f"tokens=*delims="%%iin(a.txt)doecho%%i

执行结果为:

第1行第1列第1行第2列第1行第3列第2行第1列第2行第2列第2行第3列第3行第1列第3行第2列第3行第3列

再如:

for/f"tokens=2,*delims="%%iin(a.txt)doecho%%i%%j//用%%i代替第二列,用%%j代替剩余的所有

执行结果为:

第1行第2列第1行第3列第2行第2列第2行第3列第3行第2列第3行第3列

(4.4)skip参数:

skip就是要忽略文件的前多少行

比如:

for/f"skip=2tokens=*"%%iin(a.txt)doecho%%i

结果为:

第3行第1列第3行第2列第3行第3列

用skip来告诉for跳过前两行。

如果不加tokens=*的话,执行结果为:

第3行第1列

(4.5)eol用来指定当一行以什么符号开始时,就忽略它。

再如,当内容变成:

.第1行第1列第1行第2列第1行第3列.第2行第1列第2行第2列第2行第3列第3行第1列第3行第2列第3行第3列

for/f"eol=.tokens=*"%%iin(a.txt)doecho%%i

结果是:

第3行第1列第3行第2列第3行第3列

用eol来告诉for忽略以"."开头的行。

同样也必须加tokens=*,否如此只会显示"第3行第1列"

(五)set命令:

设置变量

1.set显示环境变量

set会显示当前所有的系统环境变量

setc会显示所有以c或C开头的变量。

(即:

不区分大小写)

set显示所有以或开头的变量。

2.set设置环境变量

如:

setstr=ok//就是将变量str的值设置成字符串“OK〞

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

当前位置:首页 > 医药卫生 > 基础医学

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

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