Board logo

标题: 最强之dos命令 – for (是新手学习FOR语句的好资料) [打印本页]

作者: bagpipe     时间: 2006-3-2 13:54    标题: 最强之dos命令 – for (是新手学习FOR语句的好资料)

  这篇文章是网上找的,很多初学DOS的朋友对FOR语句掌握的好不是太过熟悉,希望这边文章能够给你开阔思路帮助你把FOR语句学好,主要的参数介绍和实例讲的都很清楚,也希望对DOS越来越感兴趣--->发挥你的想像力吧

               正文开始

以前常觉得DOS的命令行功能太弱,无法象UNIX一样可以用命令行完成非常复杂的操作。实际上,当MS从WIN2K开始将命令行增强后,已经借鉴了相当多UNIX的优点,虽然还无法做到象UNIX那么灵活,但已可完成绝大多数的任务,比如用&&和  连接两个(或更多)命令,由前一个的返回值来决定下一个是否执行,等等。而在这些增强中,最明显的,就是FOR命令。
举个例子,用适当的参数,可用FOR命令将 date /t 的输出 从 "Sat 07/13/2002" 变成你想要的格式,比如, "2002-07-13":

c:\>for /f "tokens=2,3,4 delims=/ " %a in ('date /t') do @echo %c-%a-%b
2002-07-13

该例将在(3)中详细说明。
0. 基本应用
简单说,FOR是个循环,可以用你指定的循环范围生成一系列命令。最简单的例子,就是人工指定循环范围,然后对每个值执行指定的命令。例如,想快速报告每个硬盘分区的剩余空间:

for %a in (c: d: e: f do @dir %a\   find "bytes free"

将输出:

8 Dir(s) 1,361,334,272 bytes free
15 Dir(s) 8,505,581,568 bytes free
12 Dir(s) 12,975,149,056 bytes free
7 Dir(s) 11,658,854,400 bytes free

用它可以使一些不支持通配符的命令对一系列文件进行操作。在WIN9X中,TYPE命令(显示文件内容)是不支持*.txt这种格式的(WIN2K开始TYPE已支持通配)。遇到类似情况就可以用FOR:

for %a in (*.txt) do type %a

这些还不是FOR最强大的功能。我认为它最强大的功能,表现在以下这些高级应用:

1. 可以用 /r 参数遍历整个目录树
2. 可以用 /f 参数将文本文件内容作为循环范围
3. 可以用 /f 参数将某一命令执行结果作为循环范围
4. 可以用 %~ 操作符将文件名分离成文件名、扩展名、盘符等独立部分

现分别举例说明如下:
1. 用 /r 遍历目录树
当用 *.* 或 *.txt 等文件名通配符作为 for /r 的循环范围时,可以对当前目录下所有文件(包括子目录里面的文件)进行操作。举个例子,你想在当前目录的所有txt文件(包括子目录)内容中查找"bluebear"字样,但由于find本身不能遍历子目录,所以我们用for:

for /r . %a in (*.txt) do @find "bluebear" %a

find 前面的 @ 只是让输出结果不包括 find 命令本身。这是DOS很早就有的功能。和FOR无关。
当用 . 作为循环范围时,for 只将子目录的结构(目录名)作为循环范围,而不包括里面的文件。有点象 TREE 命令,不过侧重点不同。TREE 的重点是用很漂亮易读的格式输出,而FOR的输出适合一些自动任务,例如,我们都知道用CVS管理的项目中,每个子目录下都会有一个CVS目录,有时在软件发行时我们想把这些CVS目录全部去掉:

for /r . %a in (.) do @if exist %a\CVS rd /s /q %a\CVS

先用 if exist 判断一下,是因为 for 只是机械的对每个目录进行列举,如果有些目录下面没有CVS也会被执行到。用 if exist 判断一下比较安全。
这种删除命令威力太大,请小心使用。最好是在真正执行以上的删除命令前,将 rd /s /q 换成 @echo 先列出要删出的目录,确认无误后再换回rd /s /q:

for /r . %a in (.) do @if exist %a\CVS @echo %a\CVS

可能目录中会多出一层 ".",比如 c:\proj\release\.\CVS ,但不会影响命令的执行效果。
2. 将某一文件内容或命令执行结果作为循环范围:
假如你有一个文件 todel.txt,里面是所有要删除的文件列表,现在你想将里面列出的每个文件都删掉。假设这个文件是每个文件名占一行,象这样:

c:\temp\a1.txt
c:\temp\a2.txt
c:\temp\subdir\b3.txt
c:\temp\subdir\b4.txt

那么可以用FOR来完成:

for /f %a in (todel.txt) do del %a

这个命令还可以更强大。比如你的 todel.txt 并不是象上面例子那么干净,而是由DIR直接生成,有一些没用的信息,比如这样:

Volume in drive D is DATA
Volume Serial Number is C47C-9908
Directory of D:\tmp
09/26/2001 12:50 PM 18,426 alg0925.txt
12/02/2001 04:29 AM 795 bsample.txt
04/11/2002 04:18 AM 2,043 invitation.txt
4 File(s) 25,651 bytes
0 Dir(s) 4,060,700,672 bytes free

for 仍然可以解出其中的文件名并进行操作:

for /f "skip=5 tokens=5" %a in (todel.txt) do @if exist %a DEL %a

当然,上面这个命令是在进行删除,如果你只是想看看哪些文件将被操作,把DEL换成echo:

for /f "skip=5 tokens=5" %a in (todel.txt) do @if exist %a echo %a

你将看到:

alg0925.txt
bsample.txt
invitation.txt

skip=5表示跳过前5行(就是DIR输出的头部信息),tokens=5表示将每行的第5列作为循环值放入%a,正好是文件名。在这里我加了一个文件存在判断,是因为最后一行的"free"刚好也是第5列,目前还想不出好的办法来滤掉最后两行,所以检查一下可保万无一失。
3. 可以用 /f 参数将某一命令执行结果作为循环范围
非常有用的功能。比如,我们想知道目前的环境变量有哪些名字(我们只要名字,不要值)。可是SET命令的输出是“名字=值”的格式,现在可以用FOR来只取得名字部分:

FOR /F "delims==" %i IN ('set') DO @echo %i

将看到:

ALLUSERSPROFILE
APPDATA
CLASSPATH
CommonProgramFiles
COMPUTERNAME
ComSpec
dircmd
HOMEDRIVE
......

这里是将set命令执行的结果拿来作为循环范围。delims==表示用=作为分隔符,由于FOR /F默认是用每行第一个TOKEN,所以可以分离出变量名。如果是想仅列出值:

FOR /F "delims== tokens=2" %i IN ('set') DO @echo %i

tokens=2和前例相同,表示将第二列(由=作为分隔符)作为循环值。
再来个更有用的例子:
我们知道 date /t (/t表示不要询问用户输入)的输出是象这样的:

Sat 07/13/2002

现在我想分离出日期部分,也就是13:

for /f "tokens=3 delims=/ " %a in ('date /t') do @echo %a

实际上把 tokens后面换成1,2,3或4,你将分别得到Sat, 07, 13和2002。注意delims=/后面还有个空格,表示/和空格都是分隔符。由于这个空格delims必须是/f选项的最后一项。
再灵活一点,象本文开头提到的,将日期用2002-07-13的格式输出:

for /f "tokens=2,3,4 delims=/ " %a in ('date /t') do @echo %c-%a-%b

当tokens后跟多个值时,将分别映射到%a, %b, %c等。实际上跟你指定的变量有关,如果你指定的是 %i, 它们就会用%i, %j, %k等。
灵活应用这一点,几乎没有做不了的事。
4. 可以用 %~ 操作符将文件名分离成文件名、扩展名、盘符等独立部分
这个比较简单,就是说将循环变量的值自动分离成只要文件名,只要扩展名,或只要盘符等等。
例:要将 c:\mp3下所有mp3的歌名列出,如果用一般的 dir /b/s 或 for /r ,将会是这样:

g:\mp3\Archived\05-18-01-A\游鸿明-下沙\游鸿明-01 下沙.mp3
g:\mp3\Archived\05-18-01-A\游鸿明-下沙\游鸿明-02 21个人.mp3
......
g:\mp3\Archived\05-18-01-A\王菲-寓言\王菲-阿修罗.mp3
g:\mp3\Archived\05-18-01-A\王菲-寓言\王菲-彼岸花.mp3
g:\mp3\Archived\05-18-01-A\王菲-寓言\王菲-不爱我的我不爱.mp3
......

如果我只要歌名(不要路径和".mp3"):

游鸿明-01 下沙
游鸿明-02 21个人
......
王菲-阿修罗
王菲-彼岸花
王菲-不爱我的我不爱
......

那么可以用FOR命令:

for /r g:\mp3 %a in (*.mp3) do @echo %~na

凡是 %~ 开头的操作符,都是文件名的分离操作。具体请看 for /? 帮助。
本文举的例子有些可能没有实际用处,或可用其它办法完成。仅用于体现FOR可以不借助其它工具,仅用DOS命令组合,就可完成相当灵活的任务
作者: IceCrack     时间: 2006-7-11 21:32
通过这个对于for又有了更深的了解
for %a in (c: d: e: f: )do @dir %a\   find "bytes free"
这里是不是有点错了   是不是少了一个“|”啊
或者是论坛把那个"|"给屏蔽了

[ Last edited by IceCrack on 2006-7-22 at 20:15 ]
作者: lxmxn     时间: 2006-9-15 10:26
呵呵,感觉又学到了不少了的东西```
感觉For的应用好灵活啊```
学批处理,for没有学好等于什么也没有学,呵呵```
不过我还有个问题,关于for的,现在没时间发表,以后有时间再发表!
作者: yjf2006     时间: 2006-9-15 12:21
谢谢楼主拉
作者: jieok3375     时间: 2006-10-17 00:53
好贴呀,收了慢慢学……
作者: redtek     时间: 2006-10-17 01:22
精彩~~
感谢楼主提供这么好的内容~:)
作者: beiyuly     时间: 2006-10-17 08:02
以后一定会用到的。
作者: lanlaila     时间: 2006-10-19 06:01
学习先咯。谢谢
作者: wizhiping     时间: 2006-10-19 06:22
收了慢慢学!谢谢!
作者: laohuya     时间: 2006-10-21 07:15
学习先咯。谢谢
作者: weilong888     时间: 2006-10-21 07:24
楼主对FOR命令真是理解得入木三分啊。
作者: sdaqhjz     时间: 2006-10-21 07:35
这样的好东西当然要支持了。
作者: winzip126     时间: 2006-10-23 23:22
收藏 一下
作者: zah98     时间: 2006-10-27 08:49
收了慢慢学!
作者: hymm2008     时间: 2006-10-27 23:01
一定要頂!!!
作者: yangzhiyi     时间: 2006-11-5 01:56
慢慢研究
作者: yqadsq1314     时间: 2006-11-6 16:05    标题: 牛B

厉害,受教了。
作者: zw4123     时间: 2006-11-7 02:37    标题: 来看看~我不行了

for /f "tokens=1" %i in ("C:\1.txt") do (echo 成功)
为什么这个命令在dos下输入有用,而做成批处理就没用了。
说是“此时不应有 \h.txt") do (echo 成功)。”怎么办啊。
谁能帮我解决这个问题~~
作者: 不得不爱     时间: 2006-11-7 05:33
批处理里应该是:for /f "tokens=1" %%i in ("C:\1.txt") do (echo 成功)
作者: lxmxn     时间: 2006-11-7 10:40

  批处理里面的参数应该用%号转义一下,比如在命令行下的%i,在批处理脚本里面要写成%%i,%a要写成%%a.

作者: freedossky     时间: 2006-11-8 07:26
谢了 学习了
作者: nomads678     时间: 2006-11-9 23:06
正在学习中
作者: xiaolou     时间: 2006-11-12 22:17
我是新手 学习一下 谢谢啊
作者: wtp791211     时间: 2006-11-13 05:41
谢谢。。。
作者: dos9527     时间: 2006-11-16 00:10
我一直都想找的东东
作者: again123     时间: 2006-11-16 12:00
支持!!!FOR语句真强大
作者: hxuan999     时间: 2006-11-17 06:35
真是不错,收了,有没有更高级的方法,呵.
作者: littlekang     时间: 2006-11-18 05:48
第一次知道了for的作用
大呀
作者: computom     时间: 2006-11-18 08:18
谢谢楼主拉
作者: computom     时间: 2006-11-18 08:18
还有好的东西吗?
作者: lxmxn     时间: 2006-11-19 09:02


  Quote:
Originally posted by computom at 2006-11-18 08:18:
还有好的东西吗?


  好东西多的是,到 批处理室 去看看,里面很多好东西。

  或者搜索一下精华帖也可以。

作者: gub70725     时间: 2006-11-19 13:27
这个比较高级了,先学一些简单的.
作者: kiyoyo     时间: 2006-11-21 13:35
收起来慢慢消化:)
作者: ciao     时间: 2006-11-27 10:02
慢慢看!~`   学习学习
作者: ssss     时间: 2006-11-29 04:28
谢谢21楼!
作者: wj6175755     时间: 2006-11-30 08:49
学习一下,谢谢楼主的提供!!
作者: rochi     时间: 2006-11-30 09:43
好东西,学习了,不错啊
作者: wsklll     时间: 2006-12-2 02:48
今天才算是 仔细看了下  FOR的用法真的是太灵活了
作者: 800810     时间: 2006-12-2 11:16
好的
学习一下
谢谢了
作者: trickster     时间: 2006-12-7 07:11
学习了,楼主有没有关于if语句的资料?
作者: wjq0886     时间: 2006-12-10 03:25
慢慢看了,好文章!
作者: hudisk     时间: 2006-12-11 22:12
感谢作者,感谢转贴
作者: hudisk     时间: 2006-12-12 03:53
终于看完了
作者: nt101007     时间: 2006-12-16 02:32
多谢
作者: freeapple     时间: 2006-12-16 03:34
好贴不能沉下去了,慢慢看就会懂了,非常适合我们新手,先谢谢楼主先
作者: lisiyuan     时间: 2006-12-16 04:10
哪有那么好啊
作者: sniper2008     时间: 2006-12-17 12:17
感觉unix和dos里面好多东西都是一样的呢
作者: sniper2008     时间: 2006-12-17 12:18
收集下来慢慢学习,这段时间正学习unix呢
作者: yy2372575     时间: 2006-12-19 12:17    标题: hao

顶qi !!!
作者: lisiyuan     时间: 2006-12-19 12:33
好好学习
作者: vans     时间: 2006-12-19 12:45
受教了
作者: scriptor     时间: 2006-12-24 02:56    标题: 好啊

果然强大啊
有的学了
作者: wangfei8842     时间: 2006-12-26 23:45
好,顶
作者: sssasd12     时间: 2006-12-27 00:02
又学到了一点知识,谢楼主
作者: ytllang     时间: 2006-12-27 02:58

作者: trickster     时间: 2006-12-30 03:52
以前学FOR命令是只是硬性的记下了他的用法,但为什么却一直一知半解,通过本贴的实例,猛的有一种豁然开朗的感觉.
    其实,论坛中有很多很好的教材,但都生涩难懂,如果是刚接触DOS的菜鸟看了肯定是如丈二和尚摸不着头脑,但如果在讲解各种命令的时候加上一些生动的实例,我想菜鸟朋友可能更容易理解.
   
    但不管怎么说,付出就应该有回报,在此对论坛中为大家做出奉献的朋友们说声谢谢了!

[ Last edited by trickster on 2006-12-29 at 02:54 PM ]
作者: lxhopp     时间: 2007-1-8 05:20
一点敬业精神没有,人家在网上发的时候估意留了个错误,也不知道补起来,还照抄不误。各位看一下,for %a in (c: d: e: f do @dir %a\ find "bytes free"没看出点问题吗?如果还没看出来,我就无语了。你们试一个这个命令。明显缺两个东西。
作者: 9527     时间: 2007-1-8 23:06
-- 因此帖中带有不符合论坛主旨的内容,已被屏蔽 --
作者: lxhopp     时间: 2007-1-9 01:42
楼上的人品真差,我只是说事实,用了另一个号来骂人,我就不知道是楼主你了嘛?
作者: Wengier     时间: 2007-1-9 02:33
管理说明:

技术论坛中存在一些争议甚至冲突或误会是正常的,请大家心平气和的交流和讨论,尽量化解争议和冲突,共建一个气氛良好的学习平台,谢谢合作!
作者: 雨露     时间: 2007-1-9 10:28
已将不文明的贴子都删除,请大家相互尊重对方!
这里欢迎讨论问题,不欢迎不文明行为,无论是谁.请大家克制一下!

[ Last edited by 雨露 on 2007-1-9 at 02:30 PM ]
作者: 9527     时间: 2007-1-10 01:39
既然我不尊重对方,那好...........
作者: bin1231222     时间: 2007-1-10 05:16
谢谢楼主!努力~~~
作者: electronixtar     时间: 2007-1-10 08:48
lxhopp你说话注意点
作者: lxmxn     时间: 2007-1-10 13:22

  严重鄙视像 lxhopp 这样的RZ.先扣两分……

作者: daijunjie     时间: 2007-1-10 22:27
谢谢
作者: 48344620     时间: 2007-1-11 10:30
本来就不懂FOR,看了这个更不懂,去找点初级的来看!
作者: would     时间: 2007-1-14 17:56
強貼
又學會了一招
多謝
作者: wuyugui     时间: 2007-1-15 22:23
好东东,不过还是有点头大
作者: zzlovewjj     时间: 2007-1-15 23:51
说的好 得自己研究 反复斟酌呀
作者: sjjhhx     时间: 2007-1-16 02:59
谢谢了,收下了,最近想学学dos,刚下了一本洪恩教程,觉挺好的,不知道该按照一条怎样的途学才有效率,才能学到真东西,请楼主指点之!
作者: hudisk     时间: 2007-1-28 11:00
这种好贴应置顶
作者: samual2004     时间: 2007-1-31 06:44
批处理里面不用那个 | 的,你可以自己试试
作者: czwlay     时间: 2007-1-31 16:50
又学到东西了,感谢楼主
作者: tracert     时间: 2007-2-1 09:13
forz指令太强大了
可是现在才刚刚学所以希望有人能教教我
作者: boluor     时间: 2007-2-1 12:37
可以去看一下我们论坛发的帖子嘛,感觉水平质量都很高啊
作者: letianhs123     时间: 2007-2-2 09:46
收了慢慢学!
作者: sjjhhx     时间: 2007-2-2 11:45
好贴子,看了好几遍了,做为新手还勉强看得懂。一边举着例子一边解释这种方法挺好的!楼主能不能用这种方法举一些set的例子,讲得详细一些具体到一个符号或一个参数,我感觉这样学起来对新手效率挺高的,再举一两个稍微有一点难度的批处理的例子,逐行解释。不知楼主意向如何?谢谢了!在此也向那些无私的不厌其烦地给新手们发贴子的高手们提前拜年吧!真希望自己也能早日成为高手。
作者: gne3     时间: 2007-2-18 05:21
收藏
作者: fzfchao     时间: 2007-2-18 23:15
谢谢,受益非浅,收藏了
作者: freedomfly     时间: 2007-2-19 16:45
谢谢了.好帖~
作者: junyi1314     时间: 2007-3-7 01:00
学习先咯。谢谢
作者: norkeyyang     时间: 2007-3-8 04:38
好东西一定要发出来

  Quote:
Originally posted by IceCrack at 2006-7-11 08:32 AM:
通过这个对于for又有了更深的了解
for %a in (c: d: e: f: )do @dir %a\   find "bytes free"
这里是不是有点错了   是不是少了一个“|”啊
或 ...


作者: leoson88     时间: 2007-3-12 04:32
强大功能的for 到现在还在半懂不懂中,继续学习,感谢给了宝贵资料~~
作者: wei7120     时间: 2007-3-12 04:56
顶起来!!!!!!!!!!
作者: hxmupdata     时间: 2007-3-12 06:13
好东西,,,,,,慢慢学习............多发点好东东,,支持你
作者: zxjaaa     时间: 2007-3-17 17:57
这里有那么多热心的教师,感觉真好
作者: enliang     时间: 2007-3-18 08:14
for 比较高深
作者: luweiqang2000     时间: 2007-3-18 11:41
新手报到,
看不明,
收藏慢慢学
作者: bza2006     时间: 2007-3-21 10:02
好东东,收藏先!
作者: BWSkyer     时间: 2007-3-21 11:16


  Quote:
Originally posted by IceCrack at  21:32:
通过这个对于for又有了更深的了解
for %a in (c: d: e: f: )do @dir %a\   find "bytes free"
这里是不是有点错了   是不是少了一个“|”啊
或 ...

绝对是错了,我试了N久~~~
作者: andy21017     时间: 2007-3-21 22:54
THANK YOU
作者: zwfj     时间: 2007-3-24 05:40
这个我一直都还不会呀,我要学习一下
作者: sd287054     时间: 2007-3-26 19:58
你的讲解太好了,让我们这些新手很容易就理解,请问你能不能在出一个SET命令的讲解呢?
作者: xunlian     时间: 2007-3-26 23:25
收下了~~~~
作者: stornager     时间: 2007-3-28 06:00
for好强大,谢谢楼主指教.
作者: dndiy     时间: 2007-3-28 22:31
顶起,学习中....
作者: zzyc     时间: 2007-3-29 00:03    标题: 嘿嘿

正在学习中.....
作者: cjggogo     时间: 2007-3-29 04:22
先顶再看。
作者: yang7516     时间: 2007-3-30 02:24
头蒙了
作者: buzhaiwen     时间: 2007-3-30 16:01
佩服.....
学习中.....
作者: lp1129     时间: 2007-4-2 06:01
学习这个都是先从头大了,再学习到头变小。

就基本上学会了
作者: mylsf     时间: 2007-4-3 00:10    标题: 我也想学习for

呵呵。for就是强大。
作者: kkis1314     时间: 2007-4-6 11:49
还是不够细啊!
我们这些才鸟都不会
作者: htysm     时间: 2007-4-7 00:54
简直是太强了,要消化才行的。
作者: myth126     时间: 2007-4-7 09:55
"tokens=5表示将每行的第5列作为循环值放入%a,正好是文件名。"这个是什么意思?这个列数是以什么算的?谢谢...
作者: asdf6339     时间: 2007-4-20 04:46
for命今中的%a有什么用啊?是怎么用的?
作者: guxingyibei     时间: 2007-4-20 10:57    标题: 真强

强、强、强、、、、、、、、、、、
作者: fanzhixue     时间: 2007-4-21 07:52
学习学习一下!!
作者: jashonx     时间: 2007-4-24 09:18    标题: 好东西

通过这个帖子的学习,我对for的用法有了进一步的理解。谢谢bigpipe!
作者: booybooy     时间: 2007-4-24 09:23
谢谢太感谢了

只是能不能再讲明白点最好有个视频教程

谢谢
作者: luowei144     时间: 2007-4-26 03:51
还没看 先收下了 关于FOR 有太多话想说 多少个晚上点着根烟苦思冥想 希望这篇文章能有所有帮助 谢谢楼主 辛苦拉哈
作者: luowei144     时间: 2007-4-26 04:02
有点收获 但还没完全理解。。。但愿能早日顿悟FOR 啊门 祝大家好运
作者: fengjing001     时间: 2007-4-30 10:22
收藏了,满满学习。谢谢楼主。
作者: localman     时间: 2007-5-1 17:11
完了。以前的学的压根等于没学啊。
啃FOR中······
作者: joinhoone     时间: 2007-5-17 10:49
收藏了。再消化
作者: wxww34     时间: 2007-5-25 05:35
好贴呀,收了慢慢学……
作者: Li103Z     时间: 2007-5-25 18:08
收下了
作者: rechard     时间: 2007-5-28 10:41
太菜了.看了头晕.还是收了.以后再慢慢看.
作者: yh6688     时间: 2007-6-1 13:13
学习
作者: mcy7771     时间: 2007-6-2 12:48
有点头大了!
作者: pcqq     时间: 2007-6-3 11:55
学习,谢谢楼主!
作者: tianxinniao     时间: 2007-6-3 13:51
好贴子。又学一招
作者: siai88     时间: 2007-6-3 13:56
en    我又回来了  一个月了
作者: ljsabs     时间: 2007-6-3 15:10
这样的好东西当然要支持了。
作者: dby55     时间: 2007-6-3 18:56
看了,眼都花了,
作者: guxuexi     时间: 2007-6-4 13:47
谢谢 分享 学习提高
作者: swiftwhite     时间: 2007-6-5 01:24
支持,太好的帖了,学习学习
不过有一个问题,for 语句后加if 条件判断在我的机子上不能用啊
不知道是为什么 大家有没有遇到过这个问题啊
作者: guhanxin     时间: 2007-6-5 11:42
hao
作者: ruiming     时间: 2007-6-5 23:08
谢谢,学习
作者: hxwxyz     时间: 2007-6-8 09:28
谢谢了
作者: ly2006     时间: 2007-6-9 10:49
正在找止资料 收藏了.................................
作者: xuxinxiangxue     时间: 2007-6-9 19:17
好贴啊。我细细研读了一下,受益匪浅啊!发现For的功能超强啊,以后还得慢慢挖掘。。。。谢谢楼主!
作者: txtzz001     时间: 2007-6-13 19:58
支持一下
作者: sandy1202     时间: 2007-6-14 14:47
好东西,要收藏起来慢慢学习啦。
作者: hpwsb     时间: 2007-6-14 14:51
谢谢了,先先下来,放到我的百度里去
作者: prodigall     时间: 2007-6-15 09:42
慢慢学
很有意思
作者: Lick     时间: 2007-6-16 09:30
小菜来的,学习!!!!
作者: #four#     时间: 2007-7-3 14:44
for命令用到的比较少,我学了很久也没巩固下来。不知道何时才能像楼主那样的水平。
作者: 36860450     时间: 2007-7-4 16:31
挺好的
作者: zlg029wyc027     时间: 2007-7-5 15:39
非常详细!!
作者: b102588     时间: 2007-7-7 15:30
好帖子 不过有些命令不能在我的机子上面运行 不知道是怎么回事
作者: maladana     时间: 2007-7-8 00:38
有点深奥啊,还需要多学习基础我
作者: 422904z     时间: 2007-7-8 22:08
太好了,谢谢。
作者: qpmgljf     时间: 2007-7-14 10:52
好东西。学习。真是长了见识啊。For太灵活了。。。
作者: 1112yuhua     时间: 2007-7-30 20:57
终于对for的用法有点眉目了,以前看帖子,看微软的帮助文件,一直都无法理解,非常感谢。
作者: sting     时间: 2007-7-31 11:31
水平没上来 看不懂  ^_^ 不过还是谢谢搂主分享
作者: world615     时间: 2007-8-1 15:45
勉强可以看懂
作者: john12900     时间: 2007-8-1 17:23    标题: 谢谢楼主了

谢了
作者: fwy712014     时间: 2007-8-1 18:57
慢慢学
作者: john12900     时间: 2007-8-2 08:11
谢谢楼上各位分享
作者: gys0281     时间: 2007-8-2 12:04
好帖
作者: njzhaozj     时间: 2007-8-4 13:14
不错,慢慢研究
作者: sxs88     时间: 2007-8-10 02:38
学习  谢楼主
作者: would     时间: 2007-8-10 08:02
一篇幾好的文章
但係對於入門者就是難明了點
希望他們可以慢慢學習
作者: ssy1966     时间: 2007-8-30 14:20
楼主对FOR命令真是理解得强啊。。。
作者: xshn     时间: 2007-8-30 14:30
学习,这个命令是最难懂的
作者: liwa365     时间: 2007-9-2 10:34
学习学习!
作者: rockdong     时间: 2007-9-3 17:00
好东西,拿回家慢慢看。
作者: memory     时间: 2007-9-3 18:02
thanks for your great support!

it is great for our freshman. thank you! LZ
作者: mirking     时间: 2007-9-3 20:32
早就给FOR玩傻了,谢谢了
作者: kgdetg1127     时间: 2007-9-4 18:57
哈哈。顶头!
作者: ab200210     时间: 2007-9-21 15:57
能不能再讲的详细一点啊??????用一些通俗的语言!!!!!!!!谢谢啊!!!!!!!!!
我现在对for的用法还是很晕!!!!!!!!!!
作者: kgdetg1127     时间: 2007-9-25 17:37    标题: 不简单啊

往死里顶啊。!
作者: lbw1127     时间: 2007-9-25 20:11
实在太好,一个谢字不能表达我的感情。
作者: chishingchan     时间: 2007-9-26 18:33
收藏了,慢慢看。
作者: koala     时间: 2007-9-28 21:15
get to the top!  ~!~
作者: czwlay     时间: 2007-9-30 08:09
受益了
作者: zhangyougenah     时间: 2007-9-30 17:56
好难哦,看都看不懂,不过没有关系很快我就能看懂了
作者: qingshen     时间: 2007-10-5 15:05
有点看不懂
作者: regvip2008     时间: 2007-10-23 17:22
谢谢提供!
感觉for命令真的太灵活了,楼主虽然提供的资料非常详细,但还是有没提及到的!
作者: qinlizhong     时间: 2007-10-25 10:20
想常常DOS好几年了,一直不知道怎么入门
作者: dudu666     时间: 2007-10-25 10:52
下了,好好学习一下
作者: yu208367yu     时间: 2007-10-25 20:42
顶哈
作者: faultcode     时间: 2007-10-27 14:13
WTF~~~
see~
作者: soyo     时间: 2007-10-30 22:17
谢谢了啊,大虾
作者: ExcellenT     时间: 2007-10-30 22:27
偶需要从头学起..
作者: jfsy     时间: 2007-11-1 13:11
慢慢学,先收下了
作者: TUMAO     时间: 2007-11-3 11:47
定一下啊
作者: caofmill     时间: 2007-11-4 17:14
精彩,谢谢楼主了
作者: maker0321     时间: 2007-11-5 16:12
先顶再看。看得好了接着再顶。
作者: kaikai163     时间: 2007-11-8 21:35
谢谢楼主了
作者: cliden     时间: 2007-11-10 02:27
学习了
作者: fanchou     时间: 2007-11-10 16:18
for %a in (c: d: e: f do @dir %a\   find "bytes free"
为什么执行后和他说的不一样
作者: szxyjp     时间: 2007-11-13 08:29
好文章,文章好,多谢了.
作者: ab200210     时间: 2007-11-13 14:36

作者: windowsdos     时间: 2007-11-13 15:22
感谢楼主
作者: zhouguanjie     时间: 2007-11-13 23:10
谢谢啊
作者: liwa365     时间: 2007-11-16 04:40
收藏了~~
作者: daijunjie     时间: 2007-11-17 09:32
谢谢楼主
作者: 365s     时间: 2007-11-18 08:34
学习
作者: yangxixing     时间: 2007-11-19 21:26
收下收下。。。。
作者: sunghuang     时间: 2007-11-20 09:58
学习下,谢谢
作者: chenudiab     时间: 2007-11-27 10:16
哇经典先收藏了谢谢,。。
作者: yyyyyyyyy     时间: 2007-11-27 16:47
好贴呀,收了慢慢学……
以前根本不懂……
作者: qsheup     时间: 2007-11-27 20:59
支持
作者: vinchoster     时间: 2007-11-29 14:15
收了慢慢学!
作者: yulanggongwu     时间: 2007-12-16 21:59
感谢啊,本菜鸟笑纳啦
作者: shengyiren0     时间: 2007-12-18 14:01
收藏
作者: seasunmoon     时间: 2007-12-18 14:04
谢谢楼主拉
作者: maclover815     时间: 2007-12-18 21:29
支持一下
作者: lmwxt     时间: 2007-12-19 14:34
好多啊,学习了,谢谢
作者: fzh117284     时间: 2007-12-20 00:31
谢谢楼主了。
作者: sswxfj     时间: 2007-12-20 04:15
谢啦LZ
作者: zengguobao     时间: 2007-12-23 01:17
真是写得太好了
作者: lck626     时间: 2007-12-23 19:38
看不多懂哦,收下来以后慢慢看喽!
先谢谢楼主了!!!
作者: ranon     时间: 2007-12-25 14:55
晕啊 ,XP的怎么有点不一样啊
作者: totti     时间: 2007-12-26 14:02
这样的好东西当然要支持了。
作者: riversail     时间: 2008-1-9 23:14
先谢谢了....
作者: 635635635     时间: 2008-1-10 09:44
收藏,备用。
作者: dai13910     时间: 2008-1-11 08:40    标题: 新手最容易出错的地方 :)

谢谢!
作者: gugewang     时间: 2008-1-11 19:52
学习中
作者: regvip2008     时间: 2008-1-13 12:02
确实是经典!
作者: sunkistwu     时间: 2008-1-13 12:05
通过这个对于for又有了更深的了解
CODE:  [Copy to clipboard]
--------------------------------------------------------------------------------

for %a in (c: d: e: f: )do @dir %a\   find "bytes free"
这里是不是有点错了   是不是少了一个“|”啊
或者是论坛把那个"|"给屏蔽了
作者: djmonkey1     时间: 2008-1-19 18:51
非常感谢,学习了。
作者: ngd     时间: 2008-1-22 19:40
怎么没有关于 for /d 的介绍呢?! 能否举个例子
作者: zongyueci     时间: 2008-1-27 01:34
xie xie
作者: 5201314225     时间: 2008-1-27 12:58
收藏 一下
作者: zmsh2008     时间: 2008-1-27 22:36
谢谢楼主
作者: wcyf     时间: 2008-1-29 18:21
谢谢老大了
作者: beed     时间: 2008-1-31 12:35
收了慢慢学!
作者: itseeker     时间: 2008-1-31 18:44
good
作者: allen733124     时间: 2008-2-18 16:00
一看是新手用的马上进来收藏之 哈哈
作者: w30699     时间: 2008-2-18 16:42
好东西~努力学习中~谢谢楼主
作者: windowsxphao     时间: 2008-2-19 20:46    标题: 新手学习

太感谢了,适合新手
作者: robocop     时间: 2008-2-20 12:10
多谢楼主,看完后真是学到不少东西
作者: longsir     时间: 2008-2-20 16:13
顶一下,辛苦了
作者: zihongdelei     时间: 2008-2-21 18:35


  Quote:
Originally posted by bagpipe at 2006-3-2 01:54 PM:
举个例子,用适当的参数,可用FOR命令将 date /t 的输出 从 "Sat 07/13/2002" 变成你想要的格式,比如, "2002-07-13":

c:\>for /f "tokens=2,3,4 delims=/ " %a in ('date /t') do @echo %c-%a-%b
2002-07-13

这第一个例子就在VISTA中作废!在XP中是可行的!
作者: xuwm1985     时间: 2008-3-21 11:52
xuexi
xuexi
作者: jipinshangren     时间: 2008-4-11 10:44
我只能慢慢学了,一次看了也没什么感觉,可能下次会好点!谢谢班主!
作者: monmong     时间: 2008-4-11 15:55
功能好强大
作者: lfopt     时间: 2008-4-12 21:42
学习了一片
作者: taqiao     时间: 2008-5-18 11:29
对一组文件中的每一个文件执行某个特定命令。

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

  %variable  指定一个单一字母可替换的参数。
  (set)      指定一个或一组文件。可以使用通配符。
  command    指定对每个文件执行的命令。
  command-parameters
             为特定命令指定参数或命令行开关。

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

如果命令扩展名被启用,下列额外的 FOR 命令格式会受到
支持:

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

    如果集中包含通配符,则指定与目录名匹配,而不与文件
    名匹配。

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

    检查以 [drive:]path 为根的目录树,指向每个目录中的
    FOR 语句。如果在 /R 后没有指定目录,则使用当前
    目录。如果集仅为一个单点(.)字符,则枚举该目录树。

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

    该集表示以增量形式从开始到结束的一个数字序列。
    因此,(1,1,5) 将产生序列 1 2 3 4 5,(5,-1,1) 将产生
    序列 (5 4 3 2 1)。

FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
FOR /F ["options"] %variable IN ("string") DO command [command-parameters]
FOR /F ["options"] %variable IN ('command') DO command [command-parameters]

    或者,如果有 usebackq 选项:

FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
FOR /F ["options"] %variable IN ("string") DO command [command-parameters]
FOR /F ["options"] %variable IN ('command') DO command [command-parameters]

    filenameset 为一个或多个文件名。继续到 filenameset 中的
   下一个文件之前,每份文件都已被打开、读取并经过处理。
    处理包括读取文件,将其分成一行行的文字,然后将每行
    解析成零或更多的符号。然后用已找到的符号字符串变量值
    调用 For 循环。以默认方式,/F 通过每个文件的每一行中分开
    的第一个空白符号。跳过空白行。您可通过指定可选 "options"
    参数替代默认解析操作。这个带引号的字符串包括一个或多个
    指定不同解析选项的关键字。这些关键字为:

        eol=c           - 指一个行注释字符的结尾(就一个)
        skip=n          - 指在文件开始时忽略的行数。
        delims=xxx      - 指分隔符集。这个替换了空格和跳格键的
                          默认分隔符集。
        tokens=x,y,m-n  - 指每行的哪一个符号被传递到每个迭代
                          的 for 本身。这会导致额外变量名称的分配。m-n
                          格式为一个范围。通过 nth 符号指定 mth。如果
                          符号字符串中的最后一个字符星号,
                          那么额外的变量将在最后一个符号解析之后
                          分配并接受行的保留文本。
        usebackq        - 指定新语法已在下类情况中使用:                    
                          在作为命令执行一个后引号的字符串并且一个单
                          引号字符为文字字符串命令并允许在 filenameset
                          中使用双引号扩起文件名称。

    某些范例可能有助:

FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k

    会分析 myfile.txt 中的每一行,忽略以分号打头的那些行,将
    每行中的第二个和第三个符号传递给 for 程序体;用逗号和/或
    空格定界符号。请注意,这个 for 程序体的语句引用 %i 来
    取得第二个符号,引用 %j 来取得第三个符号,引用 %k
    来取得第三个符号后的所有剩余符号。对于带有空格的文件
    名,您需要用双引号将文件名括起来。为了用这种方式来使
    用双引号,您还需要使用 usebackq 选项,否则,双引号会
    被理解成是用作定义某个要分析的字符串的。

    %i 专门在 for 语句中得到说明,%j 和 %k 是通过
    tokens= 选项专门得到说明的。您可以通过 tokens= 一行
    指定最多 26 个符号,只要不试图说明一个高于字母 'z' 或
    'Z' 的变量。请记住,FOR 变量是单一字母、分大小写和全局的;而且,
    同时不能有 52 个以上都在使用中。

    您还可以在相邻字符串上使用 FOR /F 分析逻辑;方法是,
    用单引号将括号之间的 filenameset 括起来。这样,该字符
    串会被当作一个文件中的一个单一输入行。

    最后,您可以用 FOR /F 命令来分析命令的输出。方法是,将
    括号之间的 filenameset 变成一个反括字符串。该字符串会
    被当作命令行,传递到一个子 CMD.EXE,其输出会被抓进
    内存,并被当作文件分析。因此,以下例子:

      FOR /F "usebackq delims==" %i IN (`set`) DO @echo %i

    会枚举当前环境中的环境变量名称。

另外,FOR 变量参照的替换已被增强。您现在可以使用下列
选项语法:

     ~I         - 删除任何引号("),扩充 %I
     %~fI        - 将 %I 扩充到一个完全合格的路径名
     %~dI        - 仅将 %I 扩充到一个驱动器号
     %~pI        - 仅将 %I 扩充到一个路径
     %~nI        - 仅将 %I 扩充到一个文件名
     %~xI        - 仅将 %I 扩充到一个文件扩展名
     %~sI        - 扩充的路径只含有短名
     %~aI        - 将 %I 扩充到文件的文件属性
     %~tI        - 将 %I 扩充到文件的日期/时间
     %~zI        - 将 %I 扩充到文件的大小
     %~$PATH:I   - 查找列在路径环境变量的目录,并将 %I 扩充
                   到找到的第一个完全合格的名称。如果环境变量名
                   未被定义,或者没有找到文件,此组合键会扩充到
                   空字符串

可以组合修饰符来得到多重结果:

     %~dpI       - 仅将 %I 扩充到一个驱动器号和路径
     %~nxI       - 仅将 %I 扩充到一个文件名和扩展名
     %~fsI       - 仅将 %I 扩充到一个带有短名的完整路径名
     %~dp$PATH:i - 查找列在路径环境变量的目录,并将 %I 扩充
                   到找到的第一个驱动器号和路径。
     %~ftzaI     - 将 %I 扩充到类似输出线路的 DIR

在以上例子中,%I 和 PATH 可用其他有效数值代替。%~ 语法
用一个有效的 FOR 变量名终止。选取类似 %I 的大写变量名
比较易读,而且避免与不分大小写的组合键混淆。
作者: hzx123dlm     时间: 2008-5-18 15:12
我的努力学习,不动的太多了,的多补课
作者: fengxuefeng1989     时间: 2008-5-24 16:47
FOR  IF …………
???
作者: loveyan168     时间: 2008-5-24 17:27
恩  谢谢了·
作者: xxuu     时间: 2008-5-27 10:12
不太懂
作者: lastfiend     时间: 2008-5-27 19:39
好难啊
作者: hufuchuang     时间: 2008-5-30 10:12
感谢作者,感谢指教啊!
作者: slw218856     时间: 2008-8-28 19:49
用不熟悉,怎觉得要出错

呵呵,可能新手有点不自信
作者: dosbear008     时间: 2008-8-28 23:55
谢了o(∩_∩)o...
要研究一下
作者: manfred     时间: 2008-8-29 00:29
看了之后受益匪浅...
作者: lxllxl     时间: 2008-9-17 18:53


  Quote:
Originally posted by liuyong at 2006-10-27 11:24 AM:
有点头大了!


作者: youlangyu     时间: 2008-9-19 11:03
for /r . %a in (*.txt) do @find "bluebear" %a
这个语句需要纠正一下:
for /r %a in (*.txt) do find "bluebear" %a
用搂主写的语句,没法执行,请核实。
作者: zsr     时间: 2008-9-19 19:43
先收藏了,谢谢
作者: hhzcl     时间: 2008-9-20 15:04
谢谢啦,收藏
作者: aeihua     时间: 2008-9-28 15:34
对新手来说,确实看不太懂。
作者: buddiyar     时间: 2008-9-29 10:15
for果然很强大,收藏慢慢研究
作者: bailang3106     时间: 2008-9-29 11:12
FOR命令 太灵活了.   不太好掌握.. 用到是还成.
作者: 55467015     时间: 2008-9-30 18:29


  Quote:
Originally posted by youlangyu at 2008-9-19 11:03:
for /r . %a in (*.txt) do @find "bluebear" %a
这个语句需要纠正一下:
for /r %a in (*.txt) do find "bluebear" %a
用搂主写的语句,没法执行,请核实。

不用纠正,可以运行,在xp的cmd中可以正常运行.其中"@"可以不用
C:\22>for /r . %a in (*.txt) do @find "qwert" %a

---------- C:\22\1.TXT
qwert

---------- C:\22\2.TXT
sdfsdqwert

---------- C:\22\3.TXT


[ Last edited by 55467015 on 2008-9-30 at 18:32 ]
作者: doszl     时间: 2008-10-5 13:00
收了慢慢学!
作者: smallyangchao     时间: 2008-10-5 14:17
很好
作者: inter7890     时间: 2008-10-5 15:31
收藏了  谢谢
作者: killkk     时间: 2008-10-5 23:32
批处理中。。FOR命令真的是非常的强大。。呵呵~~自己刚刚茅塞顿开领悟了这个该死的tokens参数的命令..。。帖子讲得很详细。。。支持````
作者: cysky     时间: 2008-10-7 13:17
看了楼主的帖子,觉得自己学习太浅了,以后要用心去学习了.
作者: kimlx     时间: 2008-10-25 12:42
慢慢学
作者: jchwylmh     时间: 2008-10-28 10:24
高手啊!我学习的榜样!
作者: xie1986214     时间: 2008-10-29 13:42
for /f "tokens=5 skip=5" %1 in (1.txt) do @if exist %1 @echo %1

楼主 这句不行 请核实 我是在2003系统运行的 1.txt 是在同一目录下的

1.txt的内容

Volume in drive D is DATA
Volume Serial Number is C47C-9908
Directory of D:\tmp
09/26/2001 12:50 PM 18,426 alg0925.txt
12/02/2001 04:29 AM 795 bsample.txt
04/11/2002 04:18 AM 2,043 invitation.txt
4 File(s) 25,651 bytes
0 Dir(s) 4,060,700,672 bytes free
作者: skypn520     时间: 2009-1-7 05:46
好详细的教程,上次看了一遍,忘记了.现在再来好好复习一遍,顺便留个足迹...
作者: Areahe     时间: 2009-1-9 07:21
学习先咯。谢谢