批处理教程tebieban.docx
《批处理教程tebieban.docx》由会员分享,可在线阅读,更多相关《批处理教程tebieban.docx(27页珍藏版)》请在冰豆网上搜索。
批处理教程tebieban
命令
解释
attrib
作用:
显示或更改文件属性。
格式:
ATTRIB[+R|-R][+A|-A][+S|-S][+H|-H][+I|-I]路径\文件[/S[/D][/L]]
说明:
【attrib文件;显示文件属性】
+设置属性。
-清除属性。
R只读文件属性。
A存档文件属性。
S系统文件属性。
H隐藏文件属性。
I无内容索引文件属性。
[drive:
][path][filename]指定attrib要处理的文件。
/S处理当前文件夹及其所有子文件夹中的匹配文件。
【attrib+r/s】【仅文件】
/D也处理文件夹。
【/D开关只有和/S开关一起使用才有效】
/L处理符号链接和符号链接目标的属性。
call
作用:
CALL命令可以在批处理执行过程中调用另一个批处理,当另一个批处理执行完后,再继续执行原来的批处理
(1)call[drive:
][path]filename【filename参数必须具有.bat或.cmd扩展名】
(2)call:
label参数
……
:
label
……
goto:
eof
说明:
调用本文件内命令段,相当于子程序
cd
1.不带任何参数只键入cd,显示当前目录(即路径)
2.cd\退回到根目录(即当前驱动器)
3.cd..退回上一级目录
4.cd路径更改目录,但只局限于当前驱动器内
5.cd/d路径更改目录,可以更改驱动器
cls
功能:
清除屏幕上的所有显示,光标置于屏幕左上角
color
作用:
设置默认的控制台前景和背景颜色
格式:
color颜色属性
说明:
颜色属性由两个十六进制数字指定:
第一个为背景,第二个则为前景。
每个数字可以为以下任何值之一:
0=黑色8=灰色
1=蓝色9=淡蓝色
2=绿色A=淡绿色
3=湖蓝色B=淡浅绿色
4=红色C=淡红色
5=紫色D=淡紫色
6=黄色E=淡黄色
7=白色F=亮白色
copy
作用:
拷贝一个或多个文件到指定盘上
格式:
COPY[源盘][路径]<源文件名>[目标盘][路径][目标文件名]
说明:
(1)COPY是文件对文件的方式复制数据,复制前目标盘必须已经格式化;
(2)复制过程中,目标盘上相同文件名称的旧文件会被源文件取代;
(3)复制文件时,必须先确定目标般有足够的空间,否则会出现;insufficient的错误信息,提示磁盘空间不够;
(4)文件名中允许使用通配举“*”“?
”,可同时复制多个文件;
(5)COPY命令中源文件名必须指出,不可以省略。
(6)复制时,目标文件名可以与源文件名相同,称作“同名拷贝”此时目标文件名可以省略;
(7)复制时,目标文件名也可以与源文件名不相同,称作“异名拷贝”,此时,目标文件名不能省略;
(8)复制时,还可以将几个文件合并为一个文件,称为“合并拷贝”,格式如下:
COPY[源盘][路径]<源文件名1>+<源文件名2>+…+<源文件名n>[目标盘][路径]<目标文件名>;
(9)利用COPY命令,还可以从键盘上输入数据建立文件,格式如下:
COPYCON[盘符:
][路径]<文件名>;
(10)注意:
COPY命令的使用格式,源文件名与目标文件名之间必须有空格!
date
作用:
显示或设置日期
格式:
date【显示系统日期并提示输入新的日期,不修改则可直接按回车键】
date/t【只输出当前日期,不提示输入新日期】
date2011-09-10【设置新日期】
del
格式:
del[/p][/f][/s][/q]路径\文件
说明:
删除文件,文件可以使用通配符
[/p]删除每一个文件之前提示确定
[/f]强制删除只读文件
[/s]删除所有子目录中指定文件
[/q]安静模式,删除全局通配符(*.*)时,不要求确认
dir
格式:
dir[drive:
][path][filename][/A[[:
]attributes]][/B][/C][/D][/L][/N]
[/O[[:
]sortorder]][/P][/Q][/R][/S][/T[[:
]timefield]][/W][/X][/4]
作用:
显示目录中的文件和子目录列表。
说明:
/A显示具有指定属性的文件。
属性D目录R只读文件
H隐藏文件A准备存档的文件
S系统文件I无内容索引文件
L解析点-表示“否”的前缀
/B使用空格式(没有标题信息或摘要)。
/C在文件大小中显示千位数分隔符。
这是默认值。
用/-C来
禁用分隔符显示。
/D跟宽式相同,但文件是按栏分类列出的。
/L用小写。
/N新的长列表格式,其中文件名在最右边。
/O用分类顺序列出文件。
排列顺序N按名称(字母顺序)S按大小(从小到大)
E按扩展名(字母顺序)D按日期/时间(从先到后)
G组目录优先-反转顺序的前缀
/P在每个信息屏幕后暂停。
/Q显示文件所有者。
/R显示文件的备用数据流。
/S显示指定目录和所有子目录中的文件。
/T控制显示或用来分类的时间字符域。
时间段C创建时间
A上次访问时间
W上次写入的时间
/W用宽列表格式。
/X显示为非8.3文件名产生的短名称。
格式是/N的格式,
短名称插在长名称前面。
如果没有短名称,在其位置则
显示空白。
/4用四位数字显示年
errorlevel
程序返回码,echo%errorlevel%每个命令运行结束,可以用这个命令格式查看返回码用于判断刚才的命令是否执行成功,默认为0,一般命令执行出错会设errorlevel为1
exit
作用:
退出CMD.EXE程序(命令解释器)或当前批处理脚本。
格式:
exit
find
作用:
在文件中搜索字符串。
格式:
1.find"string"路径\文件【不可省略引号;文件要带扩展名】
结果:
显示包含指定字符串的行
2.find/v"string"路径\文件
结果:
显示所有未包含指定字符串的行
3.find/c"string"路径\文件
结果:
显示包含指定字符串的行的数量
4.find/n"string"路径\文件
结果:
显示包含指定字符串在整个文本中所在的行号【就是第几行】
5.find/i"string"路径\文件
结果:
搜索字符串时忽略大小写【默认是区分大小写的】
备注:
【"string"】指定要搜索的文字串;【路径\文件】指定要搜索的文件,如果没有指定路径,find将搜索键入的或者由另一命令产生的文字
示例:
Find常和type命令结合使用
Type[drive:
][path]filename|find"string"#挑选包含string的行
Type[drive:
][path]filename|find/v"string"#剔除文件中包含string的行
Type[drive:
][path]filename|find/c#显示文件行数
以上用法将去除find命令自带的提示语(文件名提示)
@echooff
echo111>test.txt
echo222>>test.txt
find"111"test.txt
deltest.txt
pause
运行显示如下:
----------TEST.TXT
111
请按任意键继续...
@echooff
echo111>test.txt
echo222>>test.txt
typetest.txt|find"111"
deltest.txt
pause
运行显示如下:
111
请按任意键继续...
for
1.一般用法:
for%%iin(set)docommand【直接在命令行中只需要一个%】
解释:
(1)for语句的形式变量i,可以换成26个字母中的任意一个,这些字母会区分大小写,也就是说,%%I和%%i会被认为不是同一个变量
(2)set表示的字符串或变量可以是一个,也可以是多个,每一个字符串或变量,我们称之为一个元素,每个元素之间,用空格键、跳格键、逗号、分号或等号分隔;
(3)for语句依次提取set中的每一个元素,把它的值赋予形式变量i,带到do后的command中参与命令的执行;并且每次只提取一个元素,然后执行一次do后的命令语句,而无论这个元素是否被带到command中参与了command的运行;当执行完一次do后的语句之后,再提取set中的下一个元素,再执行一次command,如此循环,直到set中的所有元素都已经被提取完毕,该for语句才宣告执行结束
【for%%iin(路径\*.txt)doecho%%i与for/r路径%%iin(*.txt)doecho%%i的区别,第一个仅搜索指定文件夹下的,第二个搜索指定及其子文件夹下符合的文件】
2.for/d%%iin(路径\文件夹)docommand
解释:
文件夹命中包含通配符,在指定路径下搜索匹配的文件夹,并赋值给i【不指定路径表示在当前目录下】【仅能匹配指定目录下的第一级文件夹】【不能匹配带隐藏属性的文件夹】
3.
(1)for/r路径%%iin(.)docommand
列举路径下所有文件夹以及子文件夹,结果的显示方式为【路径\文件夹\.】
(2)for/r路径%%iin(包含通配符和扩展名的文件)docommand
列举所有符合条件的文件的路径
【不能搜索隐藏属性的文件夹或文件】
(3)for/r路径%%iin(具体文件名)doifexist%%iecho%%i
可以用来搜索文件
4.for/l%%iin(初值,步长,终值)docommand
解释:
从初值开始计数,以步长递变,直至最接近终值的那个整数值为止,这之间有多少个数,do后的语句就执行多少次。
5.
(1)for/f%%iin(test.txt)docommand
解释:
把test.txt中的文本按段落划分为元素,即第一段为元素1,第二段为元素2,空行跳过,划分之后按照for语句的循环处理机制进行处理,即把元素分别赋予%%i
(2)for/f"delims=,"%%iin(test.txt)docommand
解释:
把test.txt中的文本按段落划分为元素,即第一段为元素1,第二段为元素2,空行跳过,划分之后按照delims设定的符号【这里是,】将每个元素划分为小节【默认的划分符号是空格】【注意中英文的符号是不同的】,处理的时候,默认处理第一小节。
【可以添加一个以上的符号,如delims=,.】
(3)for/f"delims=,tokens=2"%%iin(test.txt)docommand
解释:
上面是默认处理第一小节,【tokens=2】可以设定处理的小节,这里指处理第二小节
特:
for/f"delims=,tokens=2,4"%%iin(test.txt)docommand
解释:
处理2和4小节,如果tokens=后面指定了多个数字,如果形式变量为%%i,那么,第一个数字指代的内容用第一个形式变量%%i来接收,第二个数字指代的内容用第二个形式变量%%j来接收,第三个数字指代的内容用第三个形式变量%%k来接收……第N个数字指代的内容用第N个形式变量来接收,其中,形式变量遵循字母的排序,第N个形式变量具体是什么符号,由第一个形式变量来决定:
如果第一个形式变量是%%i,那么,第二个形式变量就是%%j;如果第一个形式变量用的是%%x,那么,第二个形式变量就是%%y。
如:
for/f"delims=,tokens=2,4"%%iin(test.txt)doecho%%i%%j
(4)for/f"skip=2"%%iin(test.txt)docommand
解释:
处理时,跳过前两段
(5)for/f"eol=:
"%%iin(test.txt)docommand
解释:
处理时,忽略以【:
】开头的段,【这里的符号只能设定一个】
如何决定该使用for/f的哪种句式?
(兼谈usebackq的使用)
for/f%%iin(……)do(……)语句有好几种变形语句,不同之处在于第一个括号里的内容:
有的是用单引号括起来,有的是用双引号包住,有的不用任何符号包裹,具体格式为:
1、for/f%%iin(文件名)do(……)
2、for/f%%iin('命令语句')do(……)
3、for/f%%iin("字符串")do(……)
看到这里,我想很多人可能已经开始犯了迷糊了:
如果要解决一个具体问题,面对这么多的选择,如何决定该使用哪一条呢?
1、当你希望读取文本文件中的内容的话,第一个括号中不用任何符号包裹,应该使用的是第1条语句;例如:
你想显示test.txt中的内容,那么,就使用for/f%%iin(test.txt)doecho%%i;
2、当你读取的是命令语句执行结果中的内容的话,第一个括号中的命令语句必须使用单引号包裹,应该使用的是第2条语句;例如:
你想显示当前目录下文件名中含有test字符串的文本文件的时候,应该使用for/f%%iin('dir/a-d/b*test*.txt')doecho%%i这样的语句;
3、当你要处理的是一个字符串的时候,第一个括号中的内容必须用双引号括起来,应该是用的是第3条语句;例如:
当你想把这串字符中的点号换为短横线并显示出来的话,可以使用for/f"delims=.tokens=1-3"%%iin("")doecho%%i-%%j-%%k这样的语句。
很显然,第一个括号里是否需要用符号包裹起来,以及使用什么样的符号包裹,取决于要处理的对象属于什么类型:
如果是文件,则无需包裹;如果是命令语句,则用单引号包裹;如果是字符串,则使用双引号括起来。
当然,事情并不是绝对如此,如果细心的你想到了批处理中难缠的特殊字符,你肯定会头大如斗。
或许你头脑中灵光一闪,已经想到了一个十分头痛的问题:
在第1条语句中,如果文件名中含有空格或&,该怎么办?
照旧吗?
拿个叫test1.txt的文件来试试。
你很快写好了代码,新建文件-->码字-->保存为批处理,前后费时不到1分钟:
1.@echooff
2.for/f%%iin(test1.txt)doecho%%i
3.pause
复制代码
你兴冲冲地双击批处理,运行后,屏幕上出现了可耻的报错信息:
系统找不到文件test。
当你把test1.txt换成test&1.txt后,更怪异的事情发生了:
CMD窗口在你眼前一闪而过,然后,优雅地消失了。
你可能觉得自己的代码写错了某些符号,你再仔细的检查了一次,确认没有笔误,然后,你再次双击批处理,结果问题照旧;你开始怀疑其他程序对它可能有影响,于是关掉其他窗口,再运行了一次,问题依旧;你不服气地连续运行了好几次,还是同样的结果。
怪哉!
你一拍大腿,猛然想起了一件事:
当路径中含有特殊字符的时候,应该使用引号把路径括起来。
对,就是它了!
但是,当你把代码写出来之后,你很快就焉了:
for/f%%iin("test1.txt")doecho%%i,这不就是上面提到的第3条for/f命令的格式吗?
批处理会把test1.txt这个文件名识别为字符串啊!
还好,下面有个例子,并配有简单的说明:
FOR/F"usebackqdelims="%iIN(`set`)DO@echo%i
会枚举当前环境中的环境变量名称。
你仔细对比了for/f语句使用usebackq和不使用usebackq时在写法上的差别,很快就找到了答案:
当使用了usebackq之后,如果第一个括号中是一条命令语句,那么,就要把单引号'改成后引号`(键盘左上角esc键下面的那个按键,与~在同一键位上)。
usebackq是一个增强型参数,当使用了这个参数之后,原来的for语句中第一个括号内的写法要做如下变动:
如果第一个括号里的对象是一条命令语句的话,原来的单引号'要改为后引号`;如果第一个括号里的对象是字符串的话,原来的双引号"要改为单引号';如果第一个括号里的对象是文件名的话,要用双引号"括起来。
验证一下,把[code17]改写成如下代码:
@echooff
for/f"usebackq"%%iin("test1.txt")doecho%%i
pause
复制代码
测试通过!
此时,你很可能会仰天长叹:
Shit,微软这该死的机器翻译!
至于把代码中的空格换成&后,CMD窗口会直接退出,那是因为&是复合语句的连接符,CMD在预处理的时候,会优先把&前后两部分作为两条语句来解析,而不是大家想象中的一条完整的for语句,从而产生了严重的语法错误。
因为牵涉到预处理机制问题,不属于本节要讨论的内容,在此不做详细讲解。
这个时候,我们会吃惊地发现,区区一条for语句,竟然有多达6种句型:
1、for/f%%iin(文件名)do(……)
2、for/f%%iin('命令语句')do(……)
3、for/f%%iin("字符串")do(……)
4、for/f"usebackq"%%iin("文件名")do(……)
5、for/f"usebackq"%%iin(`命令语句`)do(……)
6、for/f"usebackq"%%iin('字符串')do(……)
其中,4、5、6由1、2、3发展而来,他们有这样的对应关系:
1-->4、2-->5、3-->6。
好在后3种情形并不常用,所以,牢牢掌握好前三种句型的适用情形就可以了,否则,要在这么多句型中确定选择哪一条语句来使用,还真有点让人头脑发懵。
至于for/f为什么要增加usebacq参数,我只为第4条语句找到了合理的解释:
为了兼容文件名中所带的空格或&。
它在第5、6条语句中为什么还有存在的必要,我也不是很明白,这有待于各位去慢慢发现。
for命令中的变量
(1)~i【删除引号】
for/f%%iin(txt3.txt)doecho%%~i【显示txt3.txt中的元素时,删除元素的引号["],删除规则是中间的引号不处理,无头不删,有头连尾删】
(2)~fi【展到一个完全合格的路径名】
见f:
\Ms_dos\for命令中的变量\test_~fi【如果%i变量的内容是一个文件名的话,他就会把这个文件所在的绝对路径打印出来,而不只单单打印一个文件名】
(3)~di【扩展到一个驱动器号】
见f:
\Ms_dos\for命令中的变量\test_~di【如果变量%%i的内容是一个文件或者目录名,他就会把他这文件或者目录所在的盘符号打印出来】
(4)~pi【扩展到一个路径】
见f:
\Ms_dos\for命令中的变量\test_~pi【只打印路径不打印文件名字】
(5)~ni【扩展到一个文件名】
见f:
\Ms_dos\for命令中的变量\test_~ni【只打印文件名字,不带扩展名】
(6)~xi
见f:
\Ms_dos\for命令中的变量\test_~xi【只打印文件的扩展名】
(7)~si
见f:
\Ms_dos\for命令中的变量\test_~si【只打印绝对短文件名】
(8)~ai
见f:
\Ms_dos\for命令中的变量\test_~ai【打印文件的属性】
(9)~ti
见f:
\Ms_dos\for命令中的变量\test_~ti【打印文件建立的日期】
(10)~zi
见f:
\Ms_dos\for命令中的变量\test_~zi【打印文件的大小】
(11)~$path:
i
fOR/f"delims="%%iin(“notepad.exe”)doecho%%~$path:
i
上面代码显示结果为C:
\WINDOWS\system32\notepad.exe
他的意思就在PATH变量里指定的路径里搜索notepad.exe文件,如果有notepad.exe则会把他所在绝对路径打印出来,没有就打印一个错误!
可以组合修饰符来得到多重结果:
%~dpI-仅将%I扩充到一个驱动器号和路径
%~nxI-仅将%I扩充到一个文件名和扩展名
%~fsI-仅将%I扩充到一个带有短名的完整路径名
%~dp$PATH:
i-查找列在路径环境变量的目录,并将%I扩充
到找到的第一个驱动器号和路径。
%~ftzaI-将%I扩充到类似输出线路的DIR
goto
作用:
跳转的意思,在批处理中允许以“:
XXX”来构建一个标号,然后用gotoXXX跳转到标号:
XXX处,然后执行标号后的命令。
标号的名字可以随便起,但是最好是有意义的字符串,前加个冒号用来表示这个字符串是标签,goto命令就是根据这个冒号(:
)来寻找下一步跳到到那里。
if
1.if[not][/i]"string1"=="string2"command
作用:
如果两个字符串相匹配,则条件成立,执行命令【注意是==;not表示不匹配】,否则运行下一句;[/i]表示在比较时不区分大小写
2.if[not]exist路径\文件command
作用:
如果指定的文件存在,则执行命令,否则运行下一句【exist换为defined可以判断变量的存在与否】
3.if[not]errorlevelnumbercommand
作用:
程序在运行结束后会返回一个数字值,若返回值大于等于指定的number,则执行命令
4.if(……)else(……)
作用:
条件成立运行if,不成立运行else【注意一定要加括号】
5.EQU-等于【=】
NEQ-不等于【!
=】
LSS-小于【<】
LEQ-小于或等于【<=】
GTR-大于【>】
GEQ-大于或等于【>=】
md
作用:
创建新的子目录
格式:
MD[盘符:
][路径名]<子目录名>
说明:
(1)“盘符”:
指定要建立子目录的磁盘驱动器字母,若省略,则为当前驱动器;
(2)“路径名”:
要建立的子目录的上级目录名,若缺省则建在当前目录下。
net
netshare
显示本机开启的共享资源
netstart
查看开启了那些服务
netstart服务名
开启服务,禁用的服务无法开启【服务名之间有空格的使用