[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] [已解决]for /r可以访问隐藏文件夹,不可访问隐藏文件

本帖最后由 coldsummerwei 于 2011-6-10 14:46 编辑

看了namejm的“批处理for语句从入门到精通”教程,感觉通俗易懂,收获很大。但也有一些疑问。
在第四部分“四、翻箱倒柜遍历文件夹:for /r ”中有如下一段话:
效果就是显示 d:\test 目录及其之下是所有子目录的路径,其效果与 dir /ad /b /s d:\test 类似。若要说到两者的区别,可以归纳出3点:
  1、for /r 列举出来的路径最后都带有斜杠和点号,而 dir 语句则没有,会对获取到的路径进行进一步加工产生影响;
  2、for /r 不能列举带隐藏属性的目录,而 dir 语句则可以通过指定 /a 后面紧跟的参数来获取带指定属性的目录,更加灵活;
  3、若要对获取到的路径进行进一步处理,则需要把 dir 语句放入 for /f 语句中进行分析,写成 for /f %%i in ('dir /ad /b /s') do …… 的形式;由于 for /r 语句是边列举路径边进行处理,所以,在处理大量路径的时候,前期不会感到有停顿,而 for /f 语句则需要等到 dir /ad /b /s 语句把所有路径都列举完之后,再读入内存进行处理,所以,在处理大量路径的时候,前期会感到有明显的停顿。

关于第2点for /r 不能列举带隐藏属性的目录,我测试后却发现可以列举。原文说了for /r 可以遍历文件夹,却没有明说也可以遍历文件。非常感谢7楼的Hello123World 同学,让我突然发现for /r 竟然也可以遍历文件。
我在G盘建立test文件夹,里面的目录a2(包括子目录和里面文件)和文件1.txt都带隐藏属性。比较命令dir /ad /b /sfor /r g:\test %i in (.) do @echo %i,运行效果如下图:

可以发现,两个命令的区别:for /r多列举了一个当前目录“g:\test”(而且每个文件夹后面多了"\."),其他没区别,都可以列举带隐藏属性的目录。
那么如何列举文件呢。再比较命令dir /a-d /b /sfor /r g:\test %i in (*) do @echo %i,运行效果如下图:

可以发现,两个命令的区别:for /r 不能列举带有隐藏属性的两个文件1.txt和3.txt,而dir /a-d /b /s则完全可以。
那么到了这一步,大家已经发现for /r是可以遍历文件的。那么用这两个命令怎么遍历所有的文件夹和文件呢。命令dir /a /b /s很容易就做到了。那么for /r呢。你可能已经想到方法了,点号.和星号*结合起来不就行了嘛!命令dir /a /b /sfor /r g:\test %i in (. *) do @echo %i运行效果如下图:

你可能已经发现了:for /r与dir命令比起来,少了两个带隐藏属性的文件1.txt和3.txt,却多了g:\test这个当前目录。
好了,以上就是已经发现的for /r和dir命令的真正明显的区别。
备注:点号.和星号*中间要有空格,顺序无所谓。(你可以调换顺序去体验它们的区别:都是先广度遍历后深度遍历,只是文件夹和文件显示顺序的区别)
附件: 您需要登录才可以下载或查看附件。没有帐号?注册
2

评分人数

Discuz!代码[fly]飞行的效果[/fly]达不到飞行的效果。

up一下。
是不是 for /r 其实可以访问隐藏属性的文件夹?
Discuz!代码[fly]飞行的效果[/fly]达不到飞行的效果。

TOP

本帖最后由 coldsummerwei 于 2011-6-9 09:34 编辑

4# mxxcgzxxx
经过测试,结果如下:
FOR /R 确实是进行了翻箱倒柜式的遍历文件夹,包括隐藏与只读目录
所以它会显示出所有的文件夹,楼主的测试只针对文件夹所以是这个结果。
那么教材上的又是什么结果呢,经测试是指隐藏文件不可显示。
你可以用1.txt来测试就可以看出结果了!
所以应该是“不能列举出隐藏文件”而不是“不能列举出隐藏目录”!
本人测试环境XP

不好意思,原来截图中的1.txt是文件夹,不是文件,我当时随便建了这样的一个文件夹。
当然 for /r 和 dir /ad /b /s这两个命令都不可以显示目录中的文件,这里讨论的只是文件夹。
为了防止引起误解,已经把1.txt这个文件夹改名为“文件夹”了。重新截了图。
Discuz!代码[fly]飞行的效果[/fly]达不到飞行的效果。

TOP

7# Hello123World
楼主本帖的主要目的是什么?——要说明for /r 可以显示出隐藏的目录和隐藏的文件吗?
可我怎么实验后,for /r 但凡是隐藏属性的,无论文件和文件夹都是显示不了的呢?
DeskSpace.lnk
新建文件夹
都是隐藏属性!

非常感谢你。帖子已经修改更新,真正想说的是:for /r可以访问带隐藏属性的目录,不可以访问带隐藏属性的文件!
Discuz!代码[fly]飞行的效果[/fly]达不到飞行的效果。

TOP

返回列表