当前位置:DOS资源站资料中心批处理教程 → 批处理for /f的通俗教程

批处理for /f的通俗教程

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2008-4-24 20:31:56

对所有的批处理初学者来说,for的应用是最难理解以及掌握的。本文由浅入深,为大家专门讲解for中最常用的for /f的使用,希望大家喜欢。

首先,要明确for /f的用途(哪怕是背):就是用来“读取”文件或者命令返回结果的内容,参数 /f的意思可以理解为:file(文件)的意思。

第一步:
下面我们通过一些实例来由浅入深的学习for /f。
刚刚讲到,for /f可以用来读取文件,它的基本用法是:for /f %%i in (file) do (cmd)
例如:在F盘根目录下新建一文本文件test.txt,输入内容1 2 3 4(每个数字一行),然后保存,再在F盘根目录下新建一批处理文件test.bat,输入代码:
@echo off&title DOS资源站 www.cmdos.net
for /f %%i in (test1.txt) do echo %%i
pause
保存,运行,我们可以看到,该文件已经成功读取test.txt中的内容!
这个只是for的最基本的用法,我们继续。

第二步:
将原来test.txt中的内容改为如下:
1 哈哈
2
3
4
然后,再运行test.bat,你会看到如下结果:
1
2
3
4
聪明的你,是否发现了问题?哦,这次,这个for命令并没有完整的读取test.txt中的内容,第一行只是读取了“哈哈”空格前的内容!这是什么原因呢?
==================2007--7--5日续==========================
原来是因为for将 第一段 以空格为标记(默认)分成了两部分,而只是将第一部分的值---1传给了%%i。这就又产生了新的问题:如果要读取该行的全部内容,要怎么办呢?我们可以指定一个用来分割字符的标记----分隔符。将原来的for命令改为如下(请看清楚它们的格式):
for /f "delims=;" %%i in (test1.txt) do echo %%i
运行,看看结果,是不是把整一行都读出来了呢?
这里说说这个分隔字符的意义:这里所有的内容因为都找不到 “;”,于是自动把所有的内容当成一个整体传给%%i。因此,这里的分隔字符还可以指定为其它的字符(该文字段不含有的)如:, \ /等等,当然还可以指定为空!!
如,将上节内容的for命令改为:
for /f "delims=" %%i in (test1.txt) do echo %%i
运行,结果是不是也一样呢?
换种思路,如果读取的内容中含有指定的分隔字符,那么结果又如何呢?
测试:将test1.txt中第一行的内容换成:“1 2测试”
然后将test.bat中的for命令改成:
for /f “delims=测" %%i in (test1.txt) do echo %%i
运行,我们发现读出来的结果如下:
1 2
2
3
4
原理:根据分隔字符,for 将第一行的内容分成了两段 ”1 2“、”试“,然后将第一段的内容”1 2“传给了%%i。

哎,可能又有一些同学有了”怪“想法:就是在上节内容中,可不可以只读取 "试” 呢?
 

文章评论评论内容只代表网友观点,与本站立场无关!

  评论人:kakamissyou   打分:100 分  发表时间:2008-9-24 11:25:29
· 把条件“delims=测"改为"tokens=2delims=测",就可以了。delims默认是把第一个token传回来...
  评论人:kakamissyou   打分:100 分  发表时间:2008-9-24 10:37:41
· verynice!Thanks!