BAT批处理文件编写详细手册Word文档下载推荐.docx
- 文档编号:18011073
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:19
- 大小:26.62KB
BAT批处理文件编写详细手册Word文档下载推荐.docx
《BAT批处理文件编写详细手册Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《BAT批处理文件编写详细手册Word文档下载推荐.docx(19页珍藏版)》请在冰豆网上搜索。
/*.*>
a.txt //将c盘文件列表写入a.txt
callc:
/ucdos/ucdos.bat//调用ucdos
echo你好//显示"
你好"
pause//暂停,等待按键继续
rem准备运行wps//注释:
准备运行wps
cducdos//进入ucdos目录
wps//运行wps
三、批处理文件的参数:
批处理文件还可以像C语言的函数一样使用参数(相当于DOS命令的命令行参数),这需要用到一个参数表示符"
%"
。
%[1-9]表示参数,参数是指在运行批处理文件时在文件名后加的以空格(或者Tab)分隔的字符串。
变量可以从%0到%9,%0表示批处理命令本身,其它参数字符串用%1到%9顺序表示。
例2:
C:
根目录下有一批处理文件名为f.bat,内容为:
@echooff
format%1
如果执行C:
/>
fa:
那么在执行f.bat时,%1就表示a:
,这样format%1就相当于formata:
,于是上面的命令运行时实际执行的是formata:
例3:
根目录下一批处理文件名为t.bat,内容为:
type%1
type%2
那么运行C:
ta.txtb.txt
%1:
表示a.txt
%2:
表示b.txt
于是上面的命令将顺序地显示a.txt和b.txt文件的内容。
%0这个不是返回参数的值了,他有两层意思!
第一层意思:
返回批处理所在绝对路径
例子:
echo%0
pause
保存为test.BAT放在桌面运行,会显示如下结果
"
\DocumentsandSettings\Administrator\桌面\test.bat"
他把当前批处理执行的所在路经打印出来了,这就是返回批处理所在绝对路径的意思
第二层意思:
无限循环执行BAT
netuser
%0
保存为BAT执行,他就会无限循环执行netuser这条命令,直到你手动停止.
%*参数:
返回参数,不过他是一次返回全部参数,不用分别%1,%2等一一返回。
例子
echo%*
同样保存为test.bat放到C盘
进入CMD,输入cdc:
\
然后输入test.bat我是第一个参数我是第二个参数我是第三个参数我是第四个参数
可以看到他一次把全部参数都显示出来了
四、自定义变量:
自定义变量使用set命令。
如:
setvar=value//有空格的字符串也不需要引号。
echo%var%
其中var就是自定义的变量。
五、特殊命令
(一)if命令
if是条件语句,用来判断是否符合规定的条件,从而决定执行不同的命令。
有三种格式:
1.if[not]"
参数"
=="
字符串"
待执行的命令
//注意:
为了防止参数为空的情况,一般会将参数与字符串用双引号(或者其它符号,注意不能使用保留符号)括起来。
if[%1]==[A]或者if%1*==A*,这里*不是通配符。
是要保证等号两边的字符一致。
参数如果等于(not表示不等,下同)指定的字符串,则条件成立,运行命令,否则运行下一句。
例:
if"
%1"
=="
a"
formata:
2.if[not]exist[路径/]文件名待执行的命令
如果有指定的文件,则条件成立,运行命令,否则运行下一句。
如:
ifexistc:
/config.systypec:
/config.sys//表示如果存在c:
/config.sys文件,则显示它的内容。
3.iferrorlevel<
数字>
待执行的命令
很多DOS程序在运行结束后会返回一个数字值用来表示程序运行的结果(或者状态),通过iferrorlevel命令可以判断程序的返回值,根据不同的返回值来决定执行不同的命令(返回值必须按照从大到小的顺序排列)。
如果返回值等于指定的数字,则条件成立,运行命令,否则运行下一句。
IF
ERRORLEVEL
是用来测试它的上一个DOS命令的返回值的,注意只是上一个命令的返回值,而且返回值必须依照从大到小次序顺序判断。
如下的例子,先判断返回值为1的,再判断返回值为0的。
1
ECHO
文件拷贝失败
0
成功拷贝文件
如iferrorlevel2gotox2
4.ifnumber比较符valuecommand
EQU等于
NEQ不等于
LSS小于
LEQ小于或等于
GTR大于
GEQ大于或等于
5.ifdefinedtestcommand//如果定了了变量test,则执行command。
ifdefinedtestechoItisdefined.
6.if条件1(command1)else(command2)//条件1后的命令行必须有括号。
在if后,若要执行多条命令,可以将这些命令放在一对括号中,且左括号必须跟if关键字在同一行,如:
cd/d:
/slfslfsl
iferrorlevel1(
mkdird:
\error
\1
\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"
如果我运行命令:
屏幕上会显示:
[Y,N,C]?
test.bat的内容如下(注意,用iferrorlevel判断返回值时,要按返回值从高到低排列):
@echooff
choice/Cdme/M"
defrag,mem,end"
iferrorlevel3gotoend
iferrorlevel2gotomem
iferrotlevel1gotodefrag
defrag
c:
/dos/defrag
mem
echogoodbye
注:
如果在bat文件中出现外部程序,需要知道绝对路径,并需要用引号。
“C:
\ProgramFiles(x86)\MicrosoftOffice\Office14\winword.exe”
此批处理运行后,将显示"
defrag,mem,end[D,M,E]?
,用户可选择dme,然后if语句根据用户的选择作出判断,d表示执行标号为defrag的程序段,m表示执行标号为mem的程序段,e表示执行标号为end的程序段,每个程序段最后都以gotoend将程序跳到end标号处,然后程序将显示goodbye,批处理运行结束。
(四)for命令:
(参考
对一个或一组文件,字符串或命令结果中的每一个对象执行特定命令,达到我们想要的结果。
在批处理文件中使用
FOR
命令时,指定变量请使用
%%variable,而不要用
%variable。
变量名称是区分大小写的,所以
%i
不同于
%I。
语法:
[参数]
%%变量名
IN
(相关文件或命令)
DO
执行的命令
for命令可以带参数或不带参数,带参数时支持以下参数:
/d
/l
/r
/f
1.不带参数:
FOR%%variableIN(set)DOcommand[command-parameters]
%%variable 指定一个单一字母可替换的参数。
(set) 指定一个或一组文件。
可以使用通配符。
//不带参数时,只指文件。
command 指定对每个文件执行的命令。
command-parameters为特定命令指定参数或命令行开关。
DO后面可以跟if等其他命令,需要用()括起来。
for
%%i
in
(t*.*)
do
echo
--显示当前目录下与t*.*相匹配的文件(只显示文件名,不显示路径)
(d:
\mydocuments\*.doc)
@echo
--显示d:
\mydocuments\目录下与*.doc相匹配的文件
2.带有参数时:
(1)参数
(参数只能显示当前目录下的目录名字)
格式:
/D
%variable
(set)
command
[command-parameters]
这个参数主要用于目录搜索,不会搜索文件,/D
参数只能显示当前目录下的目录名字。
(特别说明:
只会搜索指定目录下的目录,不会搜索再下一级的目录。
)
(c:
\*)
--显示c盘根目录下的所有目录
(?
?
--显示当前目录下名字只有1-3个字母的目录
(2)参数
/R
(搜索指定路径及所有子目录中与set相符合的所有文件)
[[drive:
]path]
[command-parameters]
此命令会搜索指定路径及所有子目录中与set相符合的所有文件,注意是指定路径及所有子目录。
set中的文件名如果含有通配符(?
或*),则列举/R参数指定的目录及其下面的所有子目录中与set相符合的所有文件,无相符文件的目录则不列举。
如果set中为具体文件名,不含通配符,则枚举该目录树(即列举该目录及其下面的所有子目录)(并在后面加上具体的文件名),而不管set中的指定文件是否存在。
示例:
for/rc:
\%%iin(boot.ini)doecho%%i--枚举了c盘所有目录,没有通配符,命令结果会将文件名boot.ini自动见到c:
\下所有的目录下,并显示出来。
\%%iin(boot*.ini)doecho%%i--包括了通配符,只列举出保护符合通配符的文件所在的目录。
for/rd:
\backup%%iin
(1)doecho%%i--枚举d\backup目录
\%%iin(boot.ini)doifexist%%iecho%%i--很好的搜索命令,列举boot.ini存在的目录
(3)参数
/L
(该集表示以增量形式从开始到结束的一个数字序列。
可以使用负的
Step)
(start,step,end)
for/l%%iin(1,1,5)do@echo%%i--输出12345//从1开始,递增1,最大值为5
for/l%%iin(1,2,10)do@echo%%i--输出1,3,5,7,9
for/l%%iin(100,-20,1)do@echo%%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)DOcommand//file代表一个或多个文件。
for会依次将file中的文件打开,并且在进行到下一个文件之前将每个文件读取到内存,将每行作为一个的元素,%%i代表这个元素。
忽略空白的行。
]%%iIN("
string"
)DOcommand//string代表字符串
]%%iIN('
command'
)DOcommand//command代表命令。
命令行需要用单引号。
["
]可选
假如文件a.txt中有如下内容:
第1行第1列第1行第2列第1行第3列
第2行第1列第2行第2列第2行第3列
第3行第1列第3行第2列第3行第3列
你想显示a.txt中的内容,会用什么命令呢?
当然是type,typea.txt
for也可以完成同样的命令:
for/f"
tokens=*"
%%iin(a.txt)doecho%%i
还是先从括号执行,因为含有参数/f,所以for会先打开a.txt,然后读出a.txt里面的所有内容,把它作为一个集合,并且以每一行作为一个元素,所以会产生这样的集合:
{"
第1行第1列第1行第2列第1行第3列"
,//第一个元素
第2行第1列第2行第2列第2行第3列"
,//第二个元素
第3行第1列第3行第2列第3行第3列"
}
//第三个元素
集合中只有3个元素,同样用%%i依次代替每个元素,然后执行do后面的命令。
tokens参数后面在描述。
具体过程:
用%%i代替"
,执行do后面的echo%%i,显示"
,
,执行echo%%i,显示"
依次,直到每个元素都代替完为止。
为了加强理解/f的作用,请执行一下两个命令,对比即可明白:
for/f%%iin(a.txt)doecho%%i//这个会显示a.txt里面的内容,因为/f的作用,会读出a.txt中
的内容。
for%%iin(a.txt)doecho%%i//而这个只会显示a.txt这个名字,并不会读取其中的内容。
通过上面的学习,我们发现for/f会默认以每一行来作为一个元素,但是如果我们还想把每一行再分解更小的内容,该怎么办呢?
不用担心,for命令还为我们提供了更详细的参数,使我们将每一行分为更小的元素成为可能。
它们就是:
delims和tokens参数
(4.1)delims:
用来告诉for每一行应该拿什么作为分隔符,默认的分隔符是空格和tab键。
比如,还是上面的文件,我们执行下面的命令:
delims="
显示的结果是:
第1行第1列
第2行第1列
第3行第1列
为什么是这样的呢。
因为这里有了delims这个参数,=后面有一个空格,意思是再将每个元素以空格分割,默认是只取分割之后的第一个元素。
执行过程是:
将第一个元素"
分成三个元素:
第1行第1列"
"
第1行第2列"
第1行第3列"
,它默认只取第一个,即"
,然后执行do后面的命令,依次类推。
(4.2)tokens参数:
它的作用就是当你通过delims将每一行分为更小的元素时,由它来控制要取哪一个或哪几个。
还是上面的例子,执行如下命令:
tokens=2delims="
执行结果:
第1行第2列
第2行第2列
第3行第2列
如果要显示第三列,那就换成tokens=3。
如果要显示第二列和第三列,则换成tokens=2,3或tokens=2-3,如果还有更多的则为:
tokens=2-10之类的。
但参数的个数要相应的增加。
此时的命令为:
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)对于通配符*,就是把这一行全部或者这一行的剩余部分当作一个元素了。
比如:
tokens=*delims="
第3行第1列第3行第2列第3行第3列
再如:
tokens=2,*delims="
%%iin(a.txt)doecho%%i%%j//用%%i代替第二列,用%%j代替剩余的所有
第3行第2列第3行第3
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- BAT 批处理文件 编写 详细 手册