批处理教程 - 2-_第1页
批处理教程 - 2-_第2页
批处理教程 - 2-_第3页
批处理教程 - 2-_第4页
批处理教程 - 2-_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、批处理:一日一教学系列-(come from:第一篇:目录跳转:cd当我们需要处理不同路径下的文件的时候,很可能需要切换目录,这个时候,可以考虑使用目录跳转命令cd。例如,我们打开命令行窗口的时候,一般是这样操作的:在桌面左下角找到“开始”菜单,打开“运行”,输入“cmd”,回车。这个时候,命令行窗口默认的当前目录位于当前用户所在的路径下,比如:C:Documents and SettingsJM,如下图所示。一般而言,这个目录下并没有我们想要处理的文件,我们很可能需要跳转到其他目录,比如说:C盘根目录,这个时候,我们就需要使用cd来实现目录的跳转了:cd c:。cd的全称是Change Di

2、rectory,直译为改变文件夹,也就是跳转目录、切换路径的意思。它后面可以接驱动器符号、完整路径和相对路径。从它的全称可以得知,它不能操控文件,而只能作用于驱动器或文件夹。例如,我们使用 cd c:boot.ini 这个命令来跳转(boot.ini 是文件而非文件夹,就会出现“目录名无效”的错误,如下图所示。如果要跳转到当前目录的根目录下的话,可以使用一条简单的命令:cd。如下图所示。继续跳转,cd c:windowstemp,跳转到临时目录下。此时,如果想回到上一层目录windows,可以使用这条命令:cd.。如下图所示。想想看,如果执行 cd. 会发生什么情况?结果,目录没有发生跳转,原

3、地不动。如下图所示。利用这个原理,可以用 cd.test.txt 来构造0字节的文本文件。详细情况,请参考这篇文章:本人常用的批处理实用技巧之第2点。原来,在cmd中,.、.和表示相对路径,.是当前目录,.是上一层目录,而表示根目录。来看一个比较诡异的现象:从当前目录下跳转到不同分区路径d:的时候,cd d:没有成功,当前目录没有发生改变;当添加了一个参数 /d 之后,命令成功地执行了。原来,要跳转到不同分区的时候,需要添加强制跳转参数 /d 。但是,如果进入的是当前目录的子目录,则可以不使用 /d 参数。这一点是很容易被大家忽略的,希望能引起足够的重视。再来看一个更加诡异的现象:原来,当输入

4、的是当前驱动器号+冒号的时候,将显示当前目录的完整路径;当输入的是当前驱动器号+冒号+反斜杠的时候,将跳转到当前路径的根目录下。CD 的另一个非常有价值的用途是:显示当前的完整路径,一般用通过 %cd% 加以引用。如下图所示。此时,CD 作 Current Directory 解释,即“当前文件夹”。高级话题:看看下面这幅图反映了什么问题?第二篇:以树形格式罗列文件。 tree ,在英语中的基本含义是“树”,在cmd中,tree命令的功能是以树形格式罗列文件。当你向别人展示你自己所做光盘的内容的时候,或者是罗列你硬盘上某个目录下的资料的时候,tree命令显得相当方便,并且能让你展示的内容层次分

5、明,井井有条。啥也不说了,上图,顺便温习一下cd命令。当然,你可能并不满足于只给别人抓张图,你可能还想把这些信息导入到文件中去,加工一番再发出去,那么,请使用这条命令:treelist.txt,这样,所有的信息都保存到list.txt文件中去了。更多的命令,请在cmd窗口中用 tree /? 查询(其实就两个参数。很可能只是一条简单的命令,只是一眨眼的工夫,就解决了你的大问题,这就是cmd的简洁,这就是cmd的力量!第三篇:内容重定向:和当我们在cmd窗口中查询某条命令的帮助信息的时候,帮助信息是显示在命令行窗口中的,命令行窗口关闭后,这些帮助信息就看不到了,如果下次还想看,又得在命令行窗口中

6、输入查询命令,比较繁琐。有没有办法把显示在命令行窗口中的帮助信息保存下来呢?答案是肯定的,并且有不止一种答案。稍微繁琐一点的办法就是复制命令行窗口中的信息,然后粘贴到文本中保存起来。这个操作比较繁琐的:在命令行窗口点击右键,然后选择“标记”,用鼠标拉出复制范围,然后敲回车,最后,粘贴到文本中去。高效的办法就是:使用重定向符号,把原本输出到cmd窗口中的信息重定向到文本文件中去。重定向符号有两个:和。它们的作用都是改变各种提示信息的输出方向,把提示信息输出到指定的地方去各种提示信息默认是输出到屏幕上去的。例如:tree /?help.txt,这条命令语句就把 tree 命令的帮助信息重定向到了h

7、elp.txt文件中,helpnul 就把 help 命令的提示信息重定向到了空设备中去(nul表示空设备。想看看cmd中都有哪些基本命令吗?在cmd窗口中输入 help 就可以看到了;如果想把这些基本命令信息保存下来,请使用 helpd:list.txt ,然后,到D盘根目录下找到list.txt文件打开即可。和虽然都起到重定向提示信息的作用,但是,它们的作用稍有差别。单个的表示以覆盖方式重定向提示信息,也就是如果目的地原来有内容,将把原来的内容清除掉,用新内容填充;表示以追加的方式重定向提示信息,也就是说,如果目的地原来有内容,原有的内容将保持不变,在原有内容之后追加新内容。例如:假设d:

8、test.txt中的内容是:I Love batch。那么,在cmd窗口中,分别使用如下两条语句:echo me,tood:test.txt和echo me,tood:test.txt,将会发现,使用第一条语句之后,test.txt中只有一行内容:me,too,而使用第二条语句之后,test.txt中将有两条内容,分别是I Love batch和me,too。第四篇:条件判断:ifif用于条件判断,适用于以下情形:1、判断驱动器、文件或文件夹是否存在,用 if exist 语句;2、判断某两个字符串是否相等,用 if 字符串1=字符串2 语句;3、判断某两个数值是否相等,用 if 数值1 eq

9、u 数值2 语句;4、判断某个变量是否已经被赋值,用 if defined str 语句;if语句的完整格式是这样的:if 条件表达式 (语句1 else (语句2,它的含义是:如果条件表达式成立,那么,就执行语句1,否则,将执行语句2。对于以上四种情形,可以分别使用如下代码:1、if exist d:test.txt (echo D盘下有test.txt存在 else (echo D盘下不存在test.txt2、if abc=xyz (echo 字符串abc等于字符串xyz else (echo 字符串abc不等于字符串xyz3、if 1 equ 2 (echo 1等于2 else (ech

10、o 1不等于24、if defined str (echo 变量str已经被赋值,其值为%str% else (echo 变量str 的值为空判断字符串是否相等的时候,if会区分大小写,比如,单纯的if语句会认为字符串abc和字符串Abc不相同,若不想区分大小写,则需要添加 /i 开关,使用 if /i 字符串1=字符串2 的格式;另外,等于符号是连续的=而非单独的=。判断两个数值之间的大小关系,除了等于用equ之外,还有其他的关系符号,所有适用于if语句的关系符号见下表:第五篇:流程跳转:goto一般的批处理命令,都是按照自上而下的流程逐行执行的,也就是说,只有第一行的命令执行了之后,才可能

11、执行第二行,第二行执行完之后,再执行第三行如此依次执行。如果对不同的情况,需要执行不同的既定操作,若还是按照常规的执行流程的话,是无法完成任务的,这个时候,就需要引入流程跳转的概念,动用流程跳转语句 goto 了。流程跳转的含义是:改变默认的执行顺序,强制跳转到指定的位置执行特定的程序块。先来看个例子:假设需要判断用户输入的是A还是B,代码可以写成这样:echo offset /p input=请输入字母A或B:if %input%=A goto Aif %input%=B goto Bpauseexit:Aecho 您输入的字母是Apauseexit:Becho 您输入的字母是Bpausee

12、xit按照一般的执行流程,所有的代码都会自上而下逐行执行一次,结果将显示您输入的字母是A和您输入的字母是B这两行内容,很显然,这是达不到我们的要求的;但是,实际的结果是:如果您输入的字母非A即B,则结果只会显示您输入的字母是A或者您输入的字母是B;也就是说,代码的执行顺序发生了改变,不再一成不变地自上而下逐行执行了:当输入字母A后,将执行第一条if语句,此条语句执行后,将跳转到标签段:A,从而绕过了第一条if语句和:A之间的所有代码行;当输入字母B后,将执行头两条if语句,当执行完第二条if语句后,将跳转到标签段:B,从而绕过了第二条if语句和:B之间的所有代码行。从上面的例子可以看到,要让g

13、oto语句起作用,还需要:A或:B之类的标签段的配合。所谓的标签段,就是这样的一些代码块:在首行上以单个冒号打头,其后紧跟一串字符,第二行及其之后的所有行为代码语句行。在这里,第一行的冒号是标签标志,紧跟它之后的字符串是标签名,两者合称标签。goto语句后面的部分为标签名,指引着该语句执行完之后该跳到转何方,标签则接收goto语句的跳转指令,引导着goto语句的后续操作。goto语句和标签互相呼应,在实现流程跳转时相辅相成,缺一不可。下面说一下使用跳转语句goto的注意事项:1、goto语句和标签要互相呼应,不能只有goto语句而没有相应的标签段,否则,程序将找不到相应的标签段而直接退出;只有

14、标签段而没有goto语句是允许的,但不能实现流程跳转功能,从代码精简的角度来看,有标签段而没有goto语句,则此标签是多余的,可以精简掉;2、若有多个标签段,则需要注意标签段之间是否需要添加合适的退出语句来终止程序继续向下执行,这是很多新手很容易犯错的地方,需要谨慎。以上面这段代码为例,如果去掉:A 和:B之间的exit语句,那么,当输入字母A之后,结果将同时显示您输入的字母是A和您输入的字母是B这两行内容,而保留exit语句将只会在显示您输入的字母是A后,按任意键推出批处理程序,因为批处理是自上而下逐行执行的,即使用goto语句跳转之后,在新的位置上,这一执行流程仍然会保持,直到碰上另一个流

15、程跳转语句,执行过程并不会在两个标签段之间自动终止。3、标签名只可以使用常量,而不能使用变量;4、若有同名的标签段,将执行位于最顶层的标签段,其后的标签段是否得到执行,将视具体的情况加以处理。第六篇:文件复制:copycopy,中文含义为“复制”,一个很容易见名知意的命令,它的作用是复制文件,用法十分简单:copy 源文件目的路径。假设,你需要把d:testtest.txt这个文件复制到D盘根目录下,那么,使用 copy d:testtest.txt d: 就可以轻易办到。当然,这是最简单的情形,在实际使用中,还是会碰到十分复杂的情况的。如果D盘根目录下已经存在了一个名为test.txt的文件

16、,那么,复制过去的时候,copy 命令就会提示你是覆盖原文件、是放弃复制还是覆盖所有文件。如果你在批量复制的时候,一概覆盖原文件,那么,一个一个地选择十分麻烦,这个时候,你可以使用不加提示就覆盖原文件的参数 /y (相当于自动选择了Yes选项,完整的命令为 copy /y d:testtest.txt d: 。如果复制的时候,你还需要把源文件改个名,比如把test.txt改为1.txt的时候,可以直接使用:copy d:testtest.txt d:1.txt 这样的命令,也就是说,在指定目的路径的时候,直接指定文件名,那么,新的文件名就是源文件复制之后的名字。如果要复制的路径带有空格、&等特

17、殊符号的时候,请使用引号把这些特殊字符括起来,比如: copy d:test abctest.txt d:t&estcopy命令除了“复制”文件的功能外,还有一个绝活:合并多个文件为一个文件,具体的格式为:copy 文件1+文件2+文件3+目的路径新文件名。例如:copy d:test.txt+d:abc.txt d:testtest.txt,那么,就把D盘根目录下的test.txt和abc.txt 两个文件的内容合并为test.txt,并保存到d:test目录下。copy 还有一些参数,但是常用的就上面的用法,更多的用法请在命令行窗口中使用 copy /? 来查询,很容易上手的。必须注意的是

18、,copy只能复制文件,对于文件夹的复制,则需要另请高明,动用xcopy 来复制。xcopy是copy的高级版本,有更丰富的参数,能实现更加复杂的功能,通吃文件和文件夹的复制,以后将另行介绍,在这里就不展开讲解了。第七篇:文件删除:del删除文件使用的命令是del,它的全称是delete。del命令的用法很简单,使用 del 文件路径 的格式就可以了。比如,想删除D盘根目录下的test.txt,使用del d:test.txt即可。但是,并不是所有的文件都可以只用del命令就可以搞定,比如具有隐藏属性、只读属性或者系统属性的文件,假如d:test.txt具有隐藏属性,如果仅仅是 del d:t

19、est.txt 的话,d:test.txt会纹丝不动。如何删除它?这时候,就需要对del加上一些辅助参数了,隐藏属性是hidden,使用del /a:h,只读属性是read,使用del /a:r,系统属性是system,使用del /a:s,如果不知道文件是什么属性,那么,使用del /a即可不过有一种情况是例外,当文件具有只读属性的时候,还得添加 del /a /f 参数,所以,如果要对不知道属性的文件进行强制删除,使用 del /a /f 语句是最保险的做法。在这里,/f 参数表示强制删除只读属性文件的意思,f取自foce,也就是强制的意思。有段时间,威金病毒肆虐网络,以摧枯拉朽之势毁灭了

20、不少文件,其中,最关键的一点是在每个目录下生成了一个desktop.ini文件,只要把这些desktop.ini文件删除,这个病毒就没有了危害性。要删除每个目录下的desktop.ini文件,如果点开一个个的子文件夹删除的话,将不胜其烦,如果使用del命令,简单的一条语句就可以搞定,那就是:在指定目录下执行 del /a /f /s desktop.ini 命令。在这里,/s 表示搜索当前目录下的所有子文件夹,并删除指定文件的意思,s取自sub,表示“从属的”、“子目录的”的含义。删除文件是件十分危险的事情,稍有不慎,就可能删掉了重要的文件,所以,在执行删除操作的时候,需要小心谨慎。如果需要在

21、删除之前进行确认的话,可以添加一个参数:/p。当然,对于十分有把握的删除操作,并不需要逐一确认的,可以选择静默删除模式,这时候,需要使用参数:/q,也就是 quiet 的缩写形式。第八篇:重命名文件(夹:renren取自rename的前三个字母,name在英文中有“为取名”的意思,而re是前缀,有“重新做某事”的含义,结合起来,rename就是重命名的含义。ren 的用法很简单,其使用格式为:ren 旧文件新文件名。例如,把test.txt改写为abc.txt,使用 ren test.txt abc.txt即可。需要注意的是,旧文件可以使用绝对路径,也可以使用相对路径,但是,新文件名不能使用任

22、何路径,只能是新的文件名,即使这个路径就是当前目录。例如:需要修改d:testabc.txt这个文件的名字为xyz.txt的话,如果当前路径位于d:test,那么,命令可以写成:ren abc.txt xyz.txt、ren d:testabc.txt xyz.txt,但是,绝对不能写成ren d:testabc.txt d:testabc.txt这样的格式。之所以会有这个古怪的规定,可能是一旦把路径写成另外的目录,ren就具备了“移动文件+重命名文件”的功能了,这和它的定位不相符。虽然ren的用法很简单,但是,它的功能却很强大,这主要得益于ren支持*和?这两个通配符:*表示任意多个字符,?

23、表示一个字符。例如,要把所有的以.txt作为后缀名的文件改为以.doc作为后缀名,使用ren *.txt *.doc 即可,简简单单的一条语句,瞬间就改动了大量的文件,CMD命令简洁而又不失强大的特点在这里体现得淋漓尽致。又例如,要把以abc 字符串打头、并且只有5个字符的txt文件改名为以xyz字符串打头,那么,可以这样写: ren abc?.txt xyz?.txt。需要引起高度重视的是,ren在使用通配符的时候,它的匹配规则十分奇特且过于复杂,不适合新手理解,在此不再展开做详细的解释。若想了解其中的详情,请参考这篇帖子:这是不是ren的一个bug?-ren还有一个十分奇特的属性:当文件具

24、备隐藏属性或系统属性的时候,ren将不起作用,需要把文件的隐藏或系统属性去掉方可更名,对只读属性的文件,ren可顺利更名。这在很多时候给我们制造了很多麻烦:当你不知道要即将更名的文件是否具备隐藏或系统属性的时候,直接ren是很成问题的,;如果希望在重命名文件的时候,还必须保持原有的文件属性,则更加让人痛苦万分。怎么办?如果不介意文件的属性是否被改动,那么,保险的做法是,用 attrib -s -h 命令先去掉文件可能存在的系统属性或隐藏属性,然后再ren之;如果还要求更名后的文件要保持原有的属性的话,高效的做法是:先用for语句中的 %ai 扩展获取原文件的属性,经过处理之后保存到变量中去,然

25、后用 attrib -s -h 去掉文件可能存在的系统属性或隐藏属性,ren 之后,再读取保留在变量中的属性值,用 attrib 恢复原有的文件属性。 对于文件夹,ren 同样适用。 第九篇:创建文件夹:md 创建文件夹使用的是 md 命令,它的另一个写法为 mkdir(由 MakeDirectory 演变而来) , 格式为:md 文件夹名,其中,文件夹名可以使用带路径的格式。例如:md d:test,也可以 用 md test 在当前路径下建立 test 文件夹。 如果要创建的文件夹带有空格或&, 需要用引号把文件夹名括起来, 例如: test abc、 md md abc&xyz。如果不使

26、用引号,又会带来什么后果呢? 测试的结果是: 1、如果文件夹名带空格,那么,md test abc 语句会在当前目录下创建 test 和 abc 这 两个文件夹;利用这个特点,我们有时候可以收到化繁为简的奇效:如果要创建 abc def xyz 这三个文件夹,直接使用 md abc def xyz 就行了,而无需连写三条 md 语句。当然,md abc;def;xyz 或者 md abc,def,xyz 这样的写法也是可以的。 2、如果文件夹名中含有&,那么,md abc&xyz 会创建 abc 这个文件夹,并提示说:xyz 不是内部或外部命令,也不是可运行的程序或批处理文件,这是因为,&是复

27、合语句的连接符 号,它把前后两部分视为两条子语句了。 忠告:如果文件夹名含有特殊符号,请不要忘记使用双引号! md 还有一个比较方便的功能:创建中级目录。也就是说,md abc 这样的命令,可以在 当前目录下建立文件夹 a,然后,在 a 下建立文件夹 b,b 之下再建立文件夹 c,一气呵成, 而无需先 md a 之后,再 cd a,然后 md b,再 cd b,接着 cd b,然后 md c。 第十篇:删除文件夹:rd 前面的教程中介绍过,删除文件用的是 del 命令,那么,是不是像 ren 命令通吃文件和 文件夹一样,del 是不是也可以删除文件夹呢? 答案是否定的,因为删除文件夹必须使用

28、rd 命令,这叫术业有专攻_。 rd 的另外一个写法是 rmdir,源自 ReMakeDirectory。使用的方法也很简单:rd 文件夹 名 即可,例如:rd test。它支持带路径的文件夹名,例如:rd d:test。 有时候,rd 并不能很好地完成任务:你让它删除 test 文件夹,它却傲慢地向你翻白眼: 目录不是空的。不过,这也不能怨它偷懒不干活,只是它的脾气有点怪:如果要删除的文件 夹下面还有子文件, 你得给 rd 戴顶高帽, 加个 /s 参数, 它才会高高兴兴地帮你做事, 所以, 正确的写法是:rd /s test。 如果你是个彻头彻尾的懒鬼,光是使用 rd /s test ,可能

29、还是对它不甚满意,因为当 你在删除带子文件的文件夹的时候, 总是不识时务地停下来, CMD 殷勤地问你: 是否确认(Y/N? 非得等你输个字符敲下回车不可。命苦不能怨政府,点背不能怨社会,谁叫 rd 有那么大的威 力呢,它一旦耍起流氓来,那是谁也拦不住的rd 有风险,删除须谨慎啊。好在微软对那 些对删除十分有把握而又懒得要命的家伙体贴入微,提供了一个十分方便的参数 /q ,它取 自 quiet,官方解释为:安静模式,带 /S 删除目录树时不要求确认。这次再试试:rd /q /s test,真个是:弹指一挥间,灰飞烟灭,是不是有眼不见心不烦的酣畅感? 第十一篇:移动文件(夹) :move mov

30、e,英文含义为“移动” ,在批处理中,它可以把文件或文件夹从 A 处移动到 B 处。 很多时候,我看到有人在回复“如何把文件从 A 处移动到 B 处”的时候,给出的建议往 往是:先用 copy 命令复制文件,然后用 del 和 rd 删除文件和文件夹。回复者根本没有想到, 他给出的操作流程太繁琐了, 他根本没有意识到, 系统已经提供了直接移动文件的命令 move! move 的使用非常简单,基本格式为 move A B。在这里,A 表示你想要执行移动操作的文 件或文件夹,B 表示 A 被移动后保存的位置,而 A 可以使用相对路径,也可以使用绝对路径, 甚至可以使用通配符,但是,在 move 执

31、行移动文件的功能的时候,B 只能是目录路径,而不 能是文件路径很难想象,你要把 a.txt 文件移动到 b.txt 文件里去,操作系统会做何感 想。比如:move a.txt d:test,表示把当前目录下的 a.txt 移动到 d:test 目录下;move c:test.txt d:, 表示把 C 盘根目录下的 test.txt 文件移动到 D 盘根目录下; move c:*.txt d:表示把 C 盘根目录下的文本文件移动到 D 盘根目录下。 另外,需要特别注意的是:move 不能跨分区移动文件夹。感谢 zqz0012005 的提醒。 上面已经说过,如果你想把 a.txt 移动到 b.t

32、xt 文件里去,操作系统肯定会很不高兴。 如果你确实要这么干呢? move a.txt b.txt! 你会发现,对于你的胡缠蛮搞,操作系统也没拦着你,它很顺从地执行了你的命令,但 是, 结果并没有像你所期望的那样, a.txt 放进 b.txt 里面去, 把 而是把 a.txt 改名为 b.txt 了。 原来,在 move A B 这样的命令中,move 具备移动文件(夹)的基本功能,还兼有重命 名文件(夹)的功效,具体起什么作用,视情况决定: 1、如果 A、B 同为文件夹名,则把 A 移动到 B 目录下; 2、如果 A 为文件名, B 为文件夹名的时候,将把 A 移动到 B 目录下; B 为文件名的时候,将把 A 重命名为 B;如果 B 所在的位置为另一目录,则表示 在把 A 移动到 B 所在的目录下的同时,重命名为 B。 一旦你明白了 move 的这些用法,重命名文件的时候,你将会很容易在 ren 和 move 之间 做取舍:如果只是单纯地重命名文件,则 ren 和 move 任选其一即可,只是 move 的写法显得 有 点 怪 异 而 已 ; 如 果 在 要 移 动 文 件 之 后 , 还 要 重 命 名 文 件 , 选 择 move c:test.txt d:abc1.txt 的 写 法 将 一 步 到 位 , 而 先

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论