说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

For循环语句详解 - DOS BAT批处理编程入门教程(五)

HTML文档下载 WORD文档下载 PDF文档下载
上一节介绍了三种流程控制语句,对循环语句For只是简单介绍了一下,其实For的功能非常,本文的主要内容来源于网络。

上一节介绍了三种流程控制语句,对循环语句For只是简单介绍了一下,其实For的功能非常多,下面的内容来源于网络:http://www.yoyotao.net/ttt/post/137.html

 

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

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

  注意:在批处理文件中使用 FOR 命令时,指定变量请使用 %%variable,而不要用 %variable。变量名称是区分大小写的,所以 %i 不同于 %I.

  关于:for命令可以带参数或不带参数,带参数时支持以下参数:/d /l /r /f

  下面分别解释一下

 

零:无参数时:

 

  FOR %variable IN (set) DO command [command-parameters]

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

  (set)      指定一个或一组文件。可以使用通配符。

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

  command-parameters

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

 

  示例:

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

  for %%i in (d:\mydocuments\*.doc) do @echo %%i --显示d:\mydocuments\目录下与*.doc相匹配的文件

 

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

 

  格式:FOR /D %variable IN (set) DO command [command-parameters]

  这个参数主要用于目录搜索,不会搜索文件,/D 参数只能显示当前目录下的目录名字。(TTT特别说明:只会搜索指定目录下的目录,不会搜索再下一级的目录。)

 

  示例:

  for /d %%i in (c:\*) do echo %%i  --显示c盘根目录下的所有目录

  for /d %%i in (???) do echo %%i  --显示当前目录下名字只有1-3个字母的目录

 

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

 

  格式:FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]

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

 

  1、set中的文件名如果含有通配符(?或*),则列举/R参数指定的目录及其下面的所用子目录中与set相符合的所有文件,无相符文件的目录则不列举。

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

  例:for /r c:\ %%i in (*.exe) do echo %%i --把C盘根目录,和每个目录的子目录下面全部的EXE文件都列出来了!!!!

 

  示例:

  for /r c:\ %%i in (boot.ini) do echo %%i --枚举了c盘所有目录

  for /r d:\backup %%i in (1) do echo %%i  --枚举d\backup目录

  for /r c:\ %%i in (boot.ini) do if exist %%i echo %%i  --很好的搜索命令,列举boot.ini存在的目录

 

三、参数 /L (该集表示以增量形式从开始到结束的一个数字序列。可以使用负的 Step)

 

  格式:FOR /L %variable IN (start,step,end) DO command [command-parameters]

  该集表示以增量形式从开始到结束的一个数字序列。可以使用负的 Step

 

  示例:

  for /l %%i in (1,1,5) do @echo %%i  --输出1 2 3 4 5

  for /l %%i in (1,2,10) do @echo %%i  --输出1,3,5,7,9 

  for /l %%i in (100,-20,1) do @echo %%i  --输出100,80,60,40,20

  for /l %%i in (1,1,5) do start cmd  --打开5个CMD窗口

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

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

 

四、参数 /F

格式:

FOR /F ["options"] %%i IN (file) DO command

 

FOR /F ["options"] %%i IN ("string") DO command

 

FOR /F ["options"] %%i IN ('command') DO command

 

这个可能是最常用的,也是最强的命令,主要用来处理文件和一些命令的输出结果。

 

file代表一个或多个文件

 

string 代表字符串

 

command代表命令

 

["options"] 可选

 

对于FOR /F %%i IN (file) DO command

 

file为文件名,按照官方的说法是,for会依次将file中的文件打开,并且在进行到下一个文件之前将每个文件读取到内存,按照每一行分成一个一个的元素,忽略空白的行,看个例子。

 

假如文件a.txt中有如下内容:

 

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

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

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

 

你想显示a.txt中的内容,会用什么命令呢?当然是type,type a.txt

 

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

 

for /f %%i in (a.txt) do echo %%i

 

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

 

{“第1行第1列 第1行第2列 第1行第3列”, rem 第一个元素

 

“第2行第1列 第2行第2列 第2行第3列”, rem 第二个元素

 

“第3行第1列 第3行第2列 第3行第3列”}   rem 第三个元素

 

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

 

具体过程:

 

用%%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 %%i in (a.txt) do echo %%i rem 这个会显示a.txt里面的内容,因为/f的作用,会读出a.txt中 

的内容。

 

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

 

通过上面的学习,我们发现for /f会默认以每一行来作为一个元素,但是如果我们还想把每一行再分解更小的内容,该怎么办呢?不用担心,for命令还为我们提供了更详细的参数,使我们将每一行分为更小的元素成为可能。

 

它们就是:delims和tokens

 

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

 

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

 

for /f "delims= " %%i in (a.txt) do echo %%i

 

显示的结果是:

 

第1行第1列

第2行第1列

第3行第1列

 

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

 

执行过程是:

 

将第一个元素“第1行第1列 第1行第2列 第1行第3列”分成三个元素:“第1行第1列” “第1行第2列” “第1行第3列”,它默认只取第一个,即“第1行第1列”,然后执行do后面的命令,依次类推。

 

但是这样还是有局限的,如果我们想要每一行的第二列元素,那又如何呢?

 

这时候,tokens跳出来说,我能做到。

 

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

 

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

 

for /f "tokens=2 delims= " %%i in (a.txt) do echo %%i

 

执行结果:

 

第1行第2列

第2行第2列

第3行第2列

 

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

 

同时tokens支持通配符*,以及限定范围。

 

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

 

此时的命令为:

 

for /f "tokens=2,3 delims= " %%i in (a.txt) do echo %%i %%j

 

怎么多出一个%%j?

 

这是因为你的tokens后面要取每一行的两列,用%%i来替换第二列,用%%j来替换第三列。

 

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

 

执行结果为:

 

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

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

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

 

对以通配符*,就是把这一行全部或者这一行的剩余部分当作一个元素了。

 

比如:

 

for /f "tokens=* delims= " %%i in (a.txt) do echo %%i

 

执行结果为:

 

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

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

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

 

其实就跟for /f %%i in (a.txt) do echo %%i的执行结果是一样的。

 

再如:

 

for /f "tokens=2,* delims= " %%i in (a.txt) do echo %%i %%j

 

执行结果为:

 

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

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

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

 

用%%i代替第二列,用%%j代替剩余的所有

 

最后还有skip合eol,这俩个简单,skip就是要忽略文件的前多少行,而eol用来指定当一行以什么符号开始时,就忽略它。

 

比如:

 

for /f "skip=2 tokens=*" %%i in (a.txt) do echo %%i

 

结果为:

 

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

 

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

 

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

 

第3行第1列

 

不知道怎么回事。

 

再如,当a.txt内容变成:

 

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

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

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

 

执行for /f "eol=. tokens=*" %%i in (a.txt) do echo %%i结果是:

 

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

 

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

 

同样也必须加tokens=*,否则只会显示“第3行第1列”,还是不知道怎么回事。

ASP.NET如何用正则表达式得到网站页面中的所有链接 PHP实现图形验证码案例(1) Android Widget开发实例-电量监控 Android自带Widget - Clock指针钟表源代码分析 C#实现文件批量改名工具 PHP利用Google Chart API生成饼图 PHP操作SQLite数据库 PHP利用DomDocument创建XML文件 ASP.NET如何加密/解密URL网址 如何使用C#读取csv文件 三步骤实现ASP.NET(C#)项目中添加谷歌(Google Map)地图 使用C# ASP.NET以FTP客户端方式下载文件 ASP.NET如何用C#代码检测手机浏览器 使用C#读取上传的Excel文件 新版本SQL Helper类 C#使用iTextsharp生成PDF 在.NET里用iTextSharp库生成PDF文档 用itextsharp将ASP.NET页面导出到PDF中 什么是JQuery-JQuery API jQuery入门指南-JQuery API jQuery的核心部分-JQuery API $(elements)-JQuery API $(expr, context)-JQuery API $(fn) -JQuery API $(html) -JQuery API $.extend(prop) -JQuery API $.noConflict() -JQuery API each(fn)-JQuery API eq(pos)-JQuery API get(num)-JQuery API get()-JQuery API 小问题,不知你能否解决? help,base64编码 大家好,我的问题很严重。。。 哪有mediaPlayer控件的中文开发资料,谢谢大家帮忙!!! 谁能和我说一下这个程序怎么作啊 寻找VRAMDir,在计算机应用文摘里写过! sql7+access的速度问题?大家的意见? 在CTreeCtrl中,如何知道用户点击已被选择了的Item? 哪里有bas5.0的下载??????????万分感激啊!! 打印问题谁能解决 谁用过‘北京利马公司’的ERP软件?评论??? 各位大哥帮帮我! 微软高手请进:CE下开发的三个(高难度)问题。。。 现在最好的jsp服务器是什么??最全面稳定的是哪一个?? 那位仁兄能给出一个24位bmp的图片转换成黑白的bmp图片的代码(别嫌分少啊) 对不住我的职业道德了…… 那位仁兄能给出一个24位bmp的图片转换成黑白的bmp图片的代码( 别嫌分少) 一个很菜的问题:怎样把文档类的数据传到CMainFrame 一个很有趣的问题,但是比较难哟,高手请进,一定给分!!!! 请问war是什么文件? 用LOTUS SCRIPT怎么样对修改一个文档中域的值?有没有代码? 各位,哪里有design patterns下载呀? 打印问题有谁能解决 十万火急,兄弟们过来帮帮忙........... 多字段模糊查询~~~谁会啊!! 高手请进 关于dialog和控件回车键消息处理的小问题 photoshop背景色的问题 虚函数能否做友元? const^:^ *********在dll文件中怎样打开一个窗口********* 自定义对话框 求解:怎样使用数据窗口能多页预览?有这项功能吗? 域的DNS有问题! 出现out of range 只是偶尔出现并不是经常出现?我的配置在里面 想问问大家关于微软认证的看法。 我有光驱上哪找 请问斑竹:c#中有类似exit(0)之类的函数吗, 请问谁有将可执行文件中的资源提取出来保存在新的rc文件中的源代码? PB数据库的连接分类解决问题? 数据窗口鼠标焦点为什么会遗失? 怎么用xp安装盘升级两千或酒吧下的wmp? 怎样得知ListBox中已经有多少项内容了? 看看大家关于微软认证的看法(只能给77,全给了) OFFICE XP以及金山词霸的漂亮菜单如何实现的??有源代码可以参考吗?? 谁能说一下"快手"的程序是怎么工作的啊 这个问题我都问了三遍了,还是没人帮忙回答一下? 这样怎么能不行了?怪了. ~散分哦~,哈~ 可怜的准初级程序员(水平的没过,竟然拿了个资历格的) 各位兄弟请了!一个远程接入问题邀请教各位~! EI核心版是什么意思 bis装 什么意思 在广西哪里能买的价格合适质量较好的胶印油墨?报价大概是多少 ei是什么意思 结构力学里,用力矩分配法计算连续梁绘制弯矩图和剪力图 EI为常数~ 请问哪里能买到胶印油墨质量好价格低胶印纸张油墨 石家庄 各个传奇(热血、传奇世界、传奇3g)什么联系?有多少版本? 急请力学高手解(结构力学)悬臂刚架在C点作用荷载P,试求D点的挠度.EI=常数,出来加50分 结构力学求解器怎么用?smsolver 简支梁承受均布和集中荷载,跨中挠度在哪查?为什么位移都是零我定义过刚度了 你给我发个30a工字钢的材料性质命令我试试看! ei+1=0是什么意思? 氢气与氦气的区别?他们的密度分别是多少? 我就是不清楚次梁集中力 应该分配多少给我计算的这一榀框架上的柱子上面的,是一半还是多少? 广州化工原料哪里买优惠 3种以上制取氯化钠的化学方程式及类型 质量保证书怎么写 人类在建造人工生态系统的探索中还做了哪些努力?这些努力有什么意义? 临床上的BIS是什么意思? 盐酸与氢氧化钠反应 硫酸与氢氧化钡的反应 盐酸与氢氧化铝的反应 写化学方程式 那里化工原料群? bis是什么/ 水果质量保证书 怎么写有家食堂向我们家要水果供应 我家是个体户水果批发 他要我们提供水果质量保证书 这要怎么写 水果主要是西瓜 香蕉 人类在建造人工生态系统的探索中还做了哪些努力 什么是bis,作用是什么?晕,不是我提问的,我只有找个最全的.其他人抱歉了 某兴趣小组在进行探究时,试验用密度比氢气稍大的氦气作为大型升空气球的填充体,其原因是?1.2. 结构力学求解器内力系数EA怎么设 跪求氦气在不同压力下的密度?有谁知道氦气在不同压力下的密度?或者如何计算? 氦气密度约为氢气()倍,性质()活泼,可用于()等 黑洞的密度有多大黑洞的密度究竟有多大?能打个比方说明一下吗?急想知道 求图示结构B点的水平位移,EI=常数要画图的话也可以直接发照片的,急用! 什么气体密度比空气小(即可以作为气球飞上天的),除氢气外救球, 请问黑洞的密度有多大? 结构力学位移法试题,EI无穷大怎么处理 化工企业的安全与环保我们单位要叫写一篇关于安全与环保的文章.是一个民营企业.要出在黑板报上的那种. 黑洞的密度是多大? 用位移法求解图示刚架(各杆EI=常数) 讨论/沟通:怎样做好化工企业的安全管理工作!给大家提供一个交流的平台,为国家的安全工作尽点牛毛之力.宗旨:保社会稳定,促经济发展. 结构力学求解器中的单元材料性质如何确定?本人在做毕业设计,打算用结构力学求解器,求竖向荷载作用下的框架内力.则要求输入梁、柱EI和EA等,问题是这个E是等于所采用的水泥的Ec,还是要预 壬酸是化工原料还是化工产品 化工商店销售某种新型化工原料,其市场指导价是没千克160元,这种原料的进价是市场指导价的0.75倍1,为扩大销售量,化工商店决定适当调整价格,调整后的价格按八折销售,仍可获利售价0.2倍的 大家看一下这个Bis-Tris HCl 结构力学中什么是杆件结构 什么是多跨静定梁 什么是影响线 什么是转动刚度 如图,在△ABC中BC=5cm,BP、CP分别是∠ABC和∠ACB的角的平分线,且PD‖AB,PE‖AC,则△PDE的周长是_______cm若∠BPC=110°,则∠DPE=几度 买化工原料应注意什么? 结构力学求解器 请将单元性质输入后再计算是什么意思? 转动刚度怎么求 GCr15轴承钢热处理后的弹性极限值和冲击韧度是多少? 结构力学求解器提示将单元性质输入再计算是什么意思 求2010年结构力学,变截面梁那题的转动刚度怎么解变截面梁那题的第一问转动刚度怎么解,是按以变截面处为点,两边一边是按固定端算,一边以简支算吗 你知道人类在建造人工生态系统的探索中还做了哪些努力?这些努力有什么意义?急 结构力学求解器中怎么设置单元性质? 一个充有密度为0.18千克每m³的飞艇,体积为400m³,在空中飞行,空气密度为1.29千克每m³,求1)飞艇在空中飞行时受到的浮力(2)若飞艇自身的质量为130千克,则他可以装载的货物最大质量不 人类在建造人工生态系统的探索中还做的努力,这些努力有什么意义? 魔兽世界里·bis·和·AE·这两个名词是什么意思 若你买胶印油墨,需要考虑什么因素? 人类在建造人工生态系统中的探索还做了哪些努力?这些努力有什么意义? bis(fluorosulfonyl)imide这是什么意思? 请问胶印油墨国家标准吗?请问平版四色胶印油墨的执行标准是怎么样的? 什么是EI BIS的标准的含义这个也是钢材外贸中遇到的问题 一般胶印油墨的物理密度是多少?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn