已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
DOS循环:bat/批处理for命 令详解之一(史上虽详尽的总结和说明) - 本 文链接地址:/ttt/post/137.html - 前言: 虽然以前对批处理也算有点研究,但一直对for命 令理解不够透彻,偶尔用时也是照猫画虎的用一下。 虽然这是古董级的东西,但挺有意思 的,而且有时用处也是蛮大的,所以,这次下决心研究一下,通过两个晚上的学习和测试,算是理解了90%了,很有成就感。 在这次学习过程中,我作了详细的总结和说明,在这里帖出来,供不明白的朋友参阅。自认为是写得比任何教程写得都明白,因为我是从不明白过来的,是结合自 己从不理解到理解的过程写的,呕心沥血啊所以大胆地说是史上虽详尽的总结和说明 其实,这次 学习主要是通过一位高手写的教程,再结合系统提供的帮助完成的。这个教程写得真的很不错,可惜忘了记下出处和作者了!刚才又在网上搜了一下,发现这篇教程 到处都有转载,都找不到作者和原出处!实在感谢这位不知名的高手啊! -TTT200906160033 + 格式:FOR参数%变量名IN(相关文件或命令)DO执行的命令 作用:对 一个或一组文件,字符串或命令结果中的每一个对象执行特定命令,达到我们想要的结果。 注意:在批处 理文件中使用FOR命令时,指定变量请使用%variable,而不要用%variable。变量名称是区分大小写的,所以%i不同 于%I. 关于:for命 令可以带参数或不带参数,带参数时支持以下参数:/d/l/r/f 下面分别解 释一下 = 零:无参数时: - FOR%variableIN(set)DOcommandcommand-parameters %variable指定一个单一字母可替换的参数。 (set)指定一个或一组文 件。可以使用通配符。 command指定对每个文件执行的命令。 command-parameters 为特定命令指定参数或命令行开关。 TTT示例: for%iin(t*.*)doecho%i-显示当前目录下与t*.*相匹配的文件(只显示文件名,不显 示路径) for%iin(d:mydocuments*.doc)doecho%i-显示d:mydocuments目录下与*.doc相 匹配的文件 = 一、参数/d(参数只能显示当前目录下的目录名字) - 格式:FOR/D%variableIN(set)DOcommandcommand-parameters 这个参数主要用于目录搜索,不会搜索文件,/D参数只能显示当前目录下的目录名字。(TTT特别说明:只会搜索指定目录下的目录,不会搜索再下一级的 目录。) TTT示例: for/d%iin(c:*)doecho%i-显示c盘根目录下的所有目录 for/d%iin(?)doecho%i-显示当前目录下名字只有1-3个字母的目录 = 二、参数/R(搜索指定路径及所有子目录中与set相符合的所有文件) - 格 式:FOR/Rdrive:path%variableIN(set)DOcommandcommand- parameters 此命令会搜索指定路径及所有子目录中与set相符合的所有文件,注意是指定 路径及所有子目录。 1、set中的文件名如果含 有通配符(?或*),则列举/R参数指定的目录及其下面的所用子目录中与set相符合的所有文件,无相符文件的目录则不列举。 2、如果set中为具体文件名,不含通配符,则枚举该目录树(即列举该目录及其下面的所有子目录)(并在后面加上具体的文件名),而不管set中的指定 文件是否存在。 例:for/rc:%iin(*.exe)doecho%i-把C盘根目录,和每个目录的子目录下面全部的EXE文件都列 出来了! TTT示例: for/rc:%iin(boot.ini)doecho%i-枚举了c盘所有目录 for/rd:backup%iin(1)doecho%i-枚举dbackup目录 for/rc:%iin(boot.ini)doifexist%iecho%i- 很好的搜索命令,列举boot.ini存在的目录 = 三、参数/L(该集表示以增量形式从开始到结束的一个数字序列。可以使用负 的Step) - 格 式:FOR/L%variableIN(start,step,end)DOcommandcommand-parameters 该集表示以增量形式从开始到结束的一个数字序列。可以使用负的Step TTT示例: for/l%iin(1,1,5)doecho%i-输出12345 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-建立从15共5个文件夹 for/l%iin(1,1,5)dord/q%i-删除从15共5个文件夹=四、参数 /F (使用文件解析来处理命令输出、字符串及文件内容。)-这个参数是最难的,参数 又多,先简单的解释一下:for命令带这个参数可以分析文件内容,字符串内容或某一命令输出的结果,并通过设置option得我们想要的结果。 以下是某高手的解释,感觉有点太专业了,自认为不太容易理解,也列一下:迭代及文件解析-使用文件解析来处理命令输出、字符串及文件内 容。使用迭代变量定义要检查的内容或字符串,并使用各种options选项进一步修改解析方式。使用options令牌选项指定哪些令牌应该作为迭代变量 传递。请注意:在没有使用令牌选项时,/F 将只检查第一个令牌。文件解析过程包括读取输出、字符串或文件内容,将其分成独立的文本行以及再将每行解析成零个或更多个令牌。然后通过设置为令牌的迭代 变量值,调用 for 循环。默认情况下,/F 传递每个文件每一行的第一个空白分隔符号。跳过空行。+格 式:FOR /F options %variable IN (file-set) DO command command-parametersFOR /F options %variable IN (string) DO command command-parametersFOR /F options %variable IN (command) DO command command-parameters或者,如果有 usebackq 选项: FOR /F options %variable IN (file-set) DO command command-parametersFOR /F options %variable IN (string) DO command command-parametersFOR /F options %variable IN (command) DO command command-parametersTTT说明:以上是WinXP系统中的帮助 内容,你可以注意到,两者完全相同,这其实是系统的错误,第二段“如果有 usebackq 选项:”应该以下的内容:FOR /F options %variable IN (file-set) DO command command-parameters FOR /F options %variable IN (string) DO command command-parametersFOR /F options %variable IN (command) DO command command-parameters -(command中的引号为反引号,是键盘上数字1左面的那个键) +(TTT说明:下面是详细的解释,大部分是系统中的帮助内容,也有些错误(怪不得for命令这么难学),已经被我纠正了。) 1) OPTION关键字详解:eol=c:指一个行注释字符的结尾(就一个)。例如:eol=; -忽略以分号打头的那些行; skip=n:指在文件开始时忽略的行数。例如:skip=2 -忽略2行;delims=xxx:指分隔符集。这个替换了空格和跳格键 的默认分隔符集。例如:delims=, -指定用逗号,空格对字符串进行分隔。tokens=x,y,m-n:指每行的哪一个符号 被传递到每个迭代的 for 本身。这会导致额外变量名称的分配。m-n格式为一个范围。通过 nth 符号指定 mth。如果符号字符串中的最后一个字符是星号,那么额外的变量将在最后一个符号解析之后分配并接受行的保留文本。例如:tokens=2,3* -将每行中的第二个和第三个符号传递给 for 程序体;tokens=2,3* . i% -将会把取到的第二个字符串赋给i%,第三个赋给j%,剩下的赋给k%。关于usebackq,不同版本的系统提示不同的帮助,不过都有助 于理解,所以都摘抄如下:(1),usebackq:使用后引号(键盘上数字1左面的那个键)。未使用参数usebackq时:file- set表示文件,不能加引号,所以不能含有空格;加双引号表示字符串,即string;加单引号表示执行命令,即command。使用参数 usebackq时:file-set和file-set都表示文件,当文件路径或名称中有空格时,就可以用双引号括起来;单引号表示字符串,即 string;后引号表示命令执行,即command。(此段是WinXP系统中的帮助)(2),usebackq:指定新语法已在 下类情况中使用:在作为命令执行一个后引号的字符串;并且一个单引号字符为文字字符串命令;并允许在filenameset中使用双引号扩起文件名称。 以上两条结合着看,其实已经可以明白了,我再说明一下:其实这个参数的目的就是为了处理带有空格的文件名。如果您要处理的文件名和路径中含 有空格,如果直接使用,会提示找不到文件。如果你用双引号将文件名和路径括起来。这时候将作为字符串处理,而不是作为文件了。为了应对这种情况,所以才增 加了这个“usebackq”参数。如果使用了这个参数,对于括号中的加双引号的集合,系统就可以认为是文件了;真正的字符串要加单引号;命令要加反引 号。2) file-set 为一个或多个文件名。继续到 file-set 中的下一个文件之前,每份文件都已被打开、读取并经过处理。处理包括读取文件,将其分成一行行的文字,然后将每行解析成零或更多的符号。然后用已找到的符 号字符串变量值调用 For 循环。以默认方式,/F 通过每个文件的每一行中分开的第一个空白符号。跳过空白行。您可通过指定可选 options参数替代默认解析操作。这个带引号的字符串包括一个或多个指定不同解析选项的关键字。3) %i:专门在 for 语句中得到说明,%j 和 %k 是通过tokens= 选项专门得到说明的。您可以通过 tokens= 一行指定最多 26 个符号,只要不试图说明一个高于字母 z 或Z 的变量。请记住,FOR 变量是单一字母、分大小写和全局的;而且,同时不能有 52 个以上都在使用中。(TTT补充说明:一般在tokens后只指定第一个参数,如%i或%a,在后面使用第二个及两个以上的 参数,自动按顺序往下排即可。如前面指定的是%a,后面则用%b代表第二个结果,%c代表第 三个结果。测试了一下tokens后指定多个变量名,没有测试成功,应该是不可以的。所以token后只能跟要使用的第一个变量名如果使 用的变量名超过了%z或%Z,就无法使用了,曾经以为会循环过来:如%z后可以使用%a或%A,但经测试,这是不可以的。如:for /f tokens=1,2,3* delims=-, %y in (aa bb,cc-dd ee) do echo %y %z %A %a -只会输出前两个字符串,后面的两个变量是无效的。)+以下是系统提供的范例:FOR /F eol=; tokens=2,3* delims=, %i in (myfile.txt) do echo %i %j %k - 说明:会分析 myfile.txt 中的每一行,eol=; -忽略以分号打头的那些行;tokens=2,3* -将每行中的第二个和第三个符号传递给 for 程序体;delims= , -用逗号和/或空格定界符号。%i -这个 for 程序体的语句引用 %i 来取得取得的首个字符串(本例中为第二个符号),引用 %j 来取得第二个字符串(本例中为第三个符号)引用 %k来取得第三个符号后的所有剩余符号。(TTT说明:上述例子和说明中明显的错误,%i应该换为%i(帮助中有明确的说明:指定变量请使 用 %variable,而不要用 %variable,误导)+TTT:下面列我做的几个例子:1, 分析文件的例子FOR /F eol=; tokens=1,2* delims=,- %i in (d:test.txt) do echo %i %j %k2,分析字符串的例子:for /f tokens=1,2,3* delims=-, %i in (aa bb,cc-dd ee) do echo %i %j %k %l3,分析命 令输出的例子:FOR /F tokens=1* delims= %i IN (set) DO echo %i-%j如果使用了usebackq参数后,命令如下,结果与上面的完全相同。1,分析文件的例子 FOR /F usebackq eol=; tokens=1,2* delims=,- %i in (d:test.txt) do echo %i %j %k2,分析字符串的例子:for /f usebackq tokens=1,2,3* delims=-, %i in (aa bb,cc-dd ee) do echo %i %j %k %l3,分析 命令输出的例子:(会枚举当前环境中的环境变量名称和值。)FOR /F usebackq tokens=1* delims= %i IN (set) DO echo %i-%j结果大家可以试一下,很容易就明白的。第二节 FOR的集合与变量本节将FOR的“集合”和“变量”放在一起的原因是,两者之间存在着相互关系。集合向变量提供元素替换变量,因此是供应者,它决定了变量的取值范围。用术语说,集合赋值给形式变量。变量为集合内的元素提供赋值位置,它只能从集合限定的范围取值,因此是需求者。集合赋值给变量,变量又向DO命令赋值,这个过程构成一个FOR的循环。集合内元素的总量决定了FOR循环的次数。二、集合(一)概述FOR命令常见的三种表达方式:IN (Command1)、 IN (集合)、 IN (Set)。集合,也称集。在批处理里,它确定一个范围、总量,是一个数据库,由固定数值(元素)组成,向变量提供固定数值,用于替换变量。变量 和集合的关系是需求与供给的关系。集合的个数决定了需要循环的次数。集合必须用圆括号括起来。集合里的内容包罗万象。可以是单个字符,也可以是字符串,可以是文件,也可以是命令。我们见得最多有:路径+文件名:如c:note.txt文本:如歌曲列表.txt字词:如我爱北京天安门数字:如123符号:如+、-、*、命令:如set盘符:如c:还有时间、进程、注册表、服务、内存管理、启动等等。集合里可以是只有一个元素(数值),如:“我爱北京天安门”也可以有多个,如:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 解除融资居间合同范本
- 酒店前台接待合同范本
- 真实塔吊租赁合同范本
- 盖板加工承揽合同范本
- 监理房屋建设合同范本
- 药品合同生产质量协议
- 项目手续办理合同范本
- 滴管设备采购合同范本
- 满载货物送货合同范本
- 租广告车协议合同范本
- 2026年海南省五指山市房地产市场现状调研报告
- 2025年度黑龙江鹤城农业发展投资有限公司招聘工作人员13人笔试考试参考试题附答案解析
- 2025摄影工作室员工合同模板
- 2025年班组化工安全培训试题及答案
- GB/T 30341-2025机动车驾驶员培训教练场技术要求
- GB/T 41973-2022工业通风机平衡品质与振动等级规范
- 中医药健康旅游示范基地项目课件
- 华北理工口腔科学教案
- 三年级上数学老师家长会
- 静压桩施工方案三期
- 可测试性设计DFT课件
评论
0/150
提交评论