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

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列”,还是不知道怎么回事。

Airbnb的管理之道:产品设计的点评策略与技巧 Windows 8.1 Update 1的下载地址和八点须知 《近匠》棱镜:手游渠道SDK平台的技术历程 OpenSSL究竟为何物,为何它的影响力如此之大? Redis大冒险:如何跳出SQL这个坑 【走近院士】张尧学:基于透明计算的云操作系统 微软转型之路:从Build 2014开始 大势所趋 HTML5成Web开发者最关心的技术 从火种到核心,浅析Hadoop大数据用户的演变 搭建高可用的MongoDB集群(上):MongoDB的配置与副本集 软硬件协同创新,共建未来数据中心 优秀Unix管理员的七个习惯 2014Unity亚洲开发者大会倒计时 干货内容日程汇总 TIOBE 2014年4月编程语言排行榜:Perl跌至历史最低点 Hadoop集群环境下网络架构的设计与优化 CloudFoundry架构优化:NATS集群化方案 Dropbox推独立应用,公司估值已达100亿美元 【走近院士】梅宏:云计算时代软件技术发展需求和挑战 云计算战争:OpenStack vs. VMware Cortana与Siri、Google Now的较量:支持功能更多 代码面试最常用的10大算法 “颠覆医疗” 时云医疗推三款硬件产品 华为章宇:如何学习开源项目及Ceph的浅析 EMC:大数据时代中对于数据保护的重新定义 Google Glass于4月15日在美对外开放购买,售价为1500美元 电脑上的网址怎么样复制到手机 创客天下——《Make》及Maker Faire创办人、O&amp;#039;Reilly Media创始人Dale Dougherty专访 《近匠》aGlass团队:透析眼控技术的价值 一周消息树:超级充电器来袭,30秒可为手机充满电 北森CTO张庆化:利用Spark实现数据驱动价值 大公网冯咀志:站内搜索系统的PowerLinux迁移实践 关于Exp时候的4031错误? JBUILDER 6 FOR LINUX 的注册码谁有啊 谁会用safileup上传下载文件? 关于OCX控件的两个问题 数据库更新不成功的问题!(菜鸟高分提问!) 求助:多线程访问数据库的问题 触发器?很简单的 紧急求助???狂加分!!! 不相上班,怎么办呀?各位有何高招? 学习ATL的建议!!! 请问: 多个javabean怎么相互调用?如。。。。 二个简单Access问题 qq号码集合之增强版 这样的查询该怎样实现呢? 求:谁有立方体旋转的程序?需要源代码!谢谢,万分焦急!!!谢谢,100分送!!! 怎样实现这样的界面? 关于多线程中操作数据库 给一个c#连接sybase数据库的例子,谢谢! c#datagrid 增加,删除,修改 工作急需,help!!!!!!!!!!!!! 请哪位高手帮小弟做一个井字棋游戏作业,救小弟一命,感激投地并送以高分,我的信箱见内! Exchange2000的怪问题,请高手指教。 三层中的问题? datawindow加计算域或line的程序加在哪? 请问各位收邮件的程序采用的是什么组件??!!因为CFPOP,JMAIL在收中文附件时都会出现乱码。参与有分。 求助EXCEL解密 !!大送分99分! 请教JAVA中读一个文件的时候 怎么锁住它 不让别的程序来写 在ASP页面中怎样获得域用户的信息? 求助: 移值C++出问题 谁能解救我于水火???怎样解决循环运算次数太大造成程序死机的问题? 谁有delphi或bcb的简单的画图程序的源码 二个简单Access问题 Access不支持位运算吗? qq号码集合之增强版 递归函数的工作原理! 二个简单Access问题 如何在声音控制中将“全部静音(M)”选中,实现系统静音?在线等候! 韩国变性艺人河莉秀以“性感之枪”姿态攻陷香港 如何用javascript在客户端清空<input type=file>的value值?50分! qq号码集合之增强版 二个简单Access问题 谁有《Inside the c++ object model》中文名《深度探索c++物件模型》的电子版。 谁有《Inside the c++ object model》中文名《深度探索c++物件模型》的电子版。 谁知道 bzero memcmp 等函数的原代码在哪个目录下 哪个文件里 我实在找不到了 请高手指点 或提供线索 Date Time Picker如何不弹出 这里是做梦的场所 二个简单Access问题 servlet的问题 我想为对话框的按钮提供快捷键 不使用mfc的加速功能 请问怎么实现 一个关于多窗口的问题 请问各位懂行的,一个50分钟的flash要多少钱?就是动画故事,象电视上的那种。 2014最新人教版初中地理课本封面是哪 从海水中提取淡水和海水中把盐分离出去有什么区别?"使海水淡化的途径 通过海水中提取淡水或从海水中把盐分离出去(脱盐),都可以达到淡化海水的目的."盐分离出去不就是剩下淡水么?也就 物流GPS在物流业发展有什么作用? “日出江花红胜火,春来江水绿如蓝”湖中的绿色来自哪类植物? a.藻类植物b.苔藓植物c蕨类植物d种子植物 有关中国近现代史纲要的论文应该怎么写? 手机的gps定位要用网络吗? 为纪念中国建党90周年,老师要求写一篇不少于500字的作文,围绕‘历史的选择’为主题一定要是关于建党90周年,还要围绕‘历史的选择’为主题.十万火急啊. 急求中国近现代经济史的问题的答案 哪些生物适应环境和影响环境,要实例 大量氮 磷等植物性营养元素进入水体后,营养物质过剩,藻类大量繁殖,水质恶化,水生生物死亡,一般称为什么?A.富营养化B.湖泊酸化C.有毒物制污染 中国近代经济史论文要有启示的 生物对环境的适应和影响事例,我明天上生物. 大量氮磷等植物胜营养元素进入水体后,营养物质过剩,藻类大量繁殖,水质恶化,水生物死亡,一般称为()A 富营养化 B 湖泊酸化C 有毒物质污染 D 湖泊氧化请认真对待请认真对待。 中国近现代史纲要(论文)1,中国近代历次反侵略斗争失败的原因和教训.2.结合近代中国人探索国家出路的历程,说明为什么中国选择了马克思主义.3.以毛泽东为主要代表的中国共产党人探索和 什么是科普小品文? 大量氮、磷等植物胜营养元素进入水体后,营养物质过剩,藻类大量繁殖,水质恶化,水生生物死亡,一般称为急 科普小品文的语言特点是什么? 女人梦见下雨,雨水淹没自己.女人梦见下雨,雨水淹没路面.自己不知不觉走入水中越走越深,淹没水中,拼命挣扎,后看到一男人骑车身边经过(为什么只有我陷进去了啊),还求救不帮,后被一女 一个作文是以庆祝中国建党90周年的作文,或者以光辉的旗帜为题的作文,400到500字,急! 怎么写“给中国近代名人的一封信”作文啊!有知道的人快帮帮我吧,明天要上交啊 女人梦见下雨好不好 LiF NaF KF CsF 四个物质中溶解度最小的是? 请区分一下3S技术 即GIS,RS,GPS重点介绍一下应用方面的要求 限制条件 和特点 另外 最好分析一下三项技术分别在灾害预测方面的特点 昨天晚上做梦梦见下雨很多雨水,但是没看见下雨,淹没过胸部,我和我一个姐妹就从水里边走了过去,在水里走的时候感觉呼吸都困难,过去之后有个楼房 我们就上去了,一会出来看,雨水几乎没 藻类植物及其所含营养物质 GIS,RS)? 利用超声波可测海洋的深度,已知超声波在海水中传播的速度为1.5×10的3次方m|s,若发利用超声波可测海洋的深度,已知超声波在海水中传播的速度为1.5×10的3次方m|s,若发出信号10s后接收到反射 LiF.NaF.KF.CsF谁的溶解度大,为什么? 3S的关系和特点(RS GIS GPS) 女人梦见蛇和下雨如何? 决定气温的热量主要来自于哪里?主要分析一下高原日温差为何比平原地区大.比较疑问的是高原通过大气路程不是比平原短吗?为何白天气温还比平原气温低? 3s 技术中RS,GIS,GPS,各自的定位及作用,特别是相互间的关系 梦见下雨是什么意思 猜出下列谜语I have cities but no houses ; forests but bo trees; rivers without water .What I'm 地理上的3S是指GIS,RS, 描写马的好句子 猜出下列的字谜……是字谜,别猜到其它的1、喜上眉头( ) 2、你我各一半( ) 3、干涉() 4、加上两点就能飞 ()5、一只黑狗,不叫也不吼() 6、综合门市() 7、两人力大冲破天() 物质结晶法主要有两种,分别是什么?海水晒盐是哪一种? 谁能给我一些关于气候类型判断的典型例题?就是关于我国的气候类型判断,浙教版的而是给我这一类的例题! 一个圆柱体和一个圆椎体的体积相等,底面直径的比是1:3,圆柱体与圆椎体的高的比是( 我能猜出下列字谜.九点——( ) 除了海水能提盐还有什么方法 三个圆椎体体积的和正好等于一个圆柱体的体积 对还不对 关于物种分类在物种分类中,"种"为什么没有英语单词?无脊椎动物为什么没有"纲"的分类? 英语翻译水边役人双双去.儿戴宝冠头已剃/金莲难走唯行寸,尔等伊人来相聚.莲花去头文满车,公公累得断右臂.一十八竹连一片,芍药落花白了地. 河北唐山七年级地理、思想品德、生物、历史用的是什么版本的教材 请将下列谜语猜出来会吃没有嘴,会走没有腿.过河没有水,败了没有罪. 哪些名人是残疾啊,作文 求素材 要出名的 霍金和张海迪就不用了 原生动物门中藻类的分类与色素种类营养方式进化关系和代表藻类?呵呵,要是表格就更好了 关于物种划分的问题按照物种的定义,划分物种主要是依据生物间是否能交配并产生可育的后代那么,同种生物的2倍体和4倍体能交配,但产生的3倍体后代是不可育的,是否2倍体和4倍体就形成了 英语翻译请翻译英语谜语1.John is the man with the blue blood2.Who's the boy in the hat?He's my son,Tom.3.He likes talking horse.4.He is always Number one in our class.5.Speak like a book.6.It rains cats and dogs.7.Hi,long time no see.8.She 藻类色素都有什么?求系统的整理后的答案.无 猜下列谜语 有没有写残疾人的事例与评价 例如张海迪,海伦凯勒等简介 如何证明鱼的色素细胞中色素分子的移动是微管依赖性的越快越好 入侵物种分类鉴定方法 英语翻译班杰明•富兰克林有个谜语:(答案是钱)The more a man has,the more he wants.Instead of filling a vacuum,it makes one.翻译成中文怎么说? 追寻红色足迹 论文我去的是福州路的上海书城,800~2000字 如何从海水蒸发中分离各种化学成份?能得到纯的盐吗?纯盐就是可以使用的食盐. 英语翻译姐妹一样长,结伴爱成双,酸甜和苦辣,两人都同尝.筷子我有两口井,模样很难分,双腿探下去,正好齐腰深.裤子远看山有色,近听水无声,春去花还在,人来鸟不惊.画兄弟一般高,出门就
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘