ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: 香川群子

[分享] 跟我学 【喜迎2015立春】遍历文件夹(含子文件夹)方法 ABC

    [复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-2-7 20:35 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖已被收录到知识树中,索引项:文件操作和FSO
输出Dos中Dir各种开关参数的帮助文件:
  1. Sub ListDosDirHelp()
  2.     With CreateObject("Wscript.Shell") 'VBA调用Dos命令
  3.         ar = Split(.exec("cmd /c dir /?").StdOut.ReadAll, vbCrLf)
  4.         'Dos中Dir命令的开关设置为"/?" 即返回各种开关的帮助文件信息。
  5.     End With
  6.     [a1].Resize(UBound(ar)) = WorksheetFunction.Transpose(ar)
  7. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-2-7 22:45 | 显示全部楼层
本帖最后由 香川群子 于 2015-2-10 11:28 编辑

Dos版 加入Dir各种参数以后的完整代码:
  1. Sub ListFilesDos()
  2.     myMode& = Val(InputBox("Search Mode:-3 To 3", "Find File", 0)) '指定Dos Dir的查找开关、返回模式
  3.     '奇数为不含子文件夹、偶数为含子文件夹 / 负数为目录、正数为文档 / >1为文档及目录
  4.    
  5.     If myMode > -3 Then
  6.         myFile$ = InputBox("Part of Filename or Filetype as "".xl""", "Find File", ".xl")
  7.         '输入指定关键字,可以是文件(文档和目录)名称中的任意部分,或指定文件类型如 ".xl"
  8.    
  9.         Set myFolder = CreateObject("Shell.Application").BrowseForFolder(0, "GetFolder", 0)
  10.         If Not myFolder Is Nothing Then myPath$ = myFolder.Items.Item.path Else MsgBox "Folder not Selected": Exit Sub
  11.         '浏览列表指定查找目录
  12.     End If
  13.     tms = Timer
  14.     With CreateObject("Wscript.Shell") 'VBA调用Dos命令
  15.   cmdStr = Choose(myMode + 4, "/? ", "/a:d /b /s ", "/a:d /b ", "/a:a /b /s ", "/a:a /b ", "/b /s ", "/b ", "/a:a /o:e /o:n /s ", "/a:a /o:e /o:n ", "/a:d /o:e /o:n /s ", "/a:d /o:e /o:n ")
  16.         ar = Split(.exec("cmd /c dir " & cmdStr & Chr(34) & myPath & Chr(34)).StdOut.ReadAll, vbCrLf)
  17.         '指定Dos中Dir命令的开关然后提取结果 为指定文件夹以及所含子文件夹内的所有文件的含路径全名。
  18.         
  19.         s = UBound(ar) & " Files by Search time: " & Format(Timer - tms, " 0.00s") & " in: " & myPath
  20.         Application.StatusBar = " Find " & s: tms = Timer '记录Dos中执行Dir命令的耗时 并在Excel状态栏上显示
  21.         If myFile <> "" Then '如指定了匹配关键字则
  22.             ar = Filter(ar, myFile) '按指定关键词myFile进行筛选。可筛选文件名或文件类型、然后在Excel状态栏上显示结果
  23.             Application.StatusBar = Format(Timer - tms, "0.00s") & " Find " & 1 + UBound(ar) & " Files from " & s
  24.         End If
  25.     End With
  26.     [a:a] = "": If UBound(ar) > -1 Then [a2].Resize(1 + UBound(ar)) = WorksheetFunction.Transpose(ar)
  27. '    清空A列,然后输出结果
  28. End Sub
复制代码
为大家看得清楚明白,把各种开关写成Select形式:

        Select Case myMode '根据开关模式设置Dos Dir的开关参数
            Case -3
                cmdStr = "cmd /c dir /?" '列出Dir各个参数开关的帮助文件
            Case -2
                cmdStr = "cmd /c dir /a-a /b /s " & Chr(34) & myPath & Chr(34) '目录不含文档[/a-a]含子文件夹
            Case -1
                cmdStr = "cmd /c dir /a-a /b " & Chr(34) & myPath & Chr(34) '目录不含文档[/a-a](不含子文件夹)
            Case 0
                cmdStr = "cmd /c dir /a-d /b /s " & Chr(34) & myPath & Chr(34) '文档不含目录[/a-d]含子文件夹
            Case 1
                cmdStr = "cmd /c dir /a-d /b " & Chr(34) & myPath & Chr(34) '文档不含目录[/a-d](不含子文件夹)
            Case 2
                cmdStr = "cmd /c dir /b /s " & Chr(34) & myPath & Chr(34) '所有文档及目录含子文件夹
            Case 3
                cmdStr = "cmd /c dir /a-d /b " & Chr(34) & myPath & Chr(34) '所有文档及目录(不含子文件夹)
        End Select

但实际代码中用Choose语句简化。

TA的精华主题

TA的得分主题

发表于 2015-2-8 10:07 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
学习中。。。

谈一下,自己的感觉:
香川群子 的方法,相当于“我的电脑”
Win2009的方法,相当于“我的网络”,可能更适合云时代,分布式文件储存

问题是现在连“我的电脑”都没搞明白,关键找到适合自己的东东。
最后感谢两位精彩的论述。

TA的精华主题

TA的得分主题

发表于 2015-2-9 10:54 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2015-2-9 11:27 | 显示全部楼层
香川群子 发表于 2015-2-4 09:51
下面很快进入正题:

三、遍历目标文件夹内所有文件、以及所有子文件夹中的所有文件。

选择磁盘根目录时会出现下面的错误,什么原因?
未标题-1.jpg

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-2-9 12:57 | 显示全部楼层
小花鹿 发表于 2015-2-9 11:27
选择磁盘根目录时会出现下面的错误,什么原因?

System Volume Information 是windows系统文件夹,【是一个隐藏的系统文件夹】
中文名称可以翻译为“系统卷标信息”。这个文件夹里就存储着系统还原的备份信息。

"系统还原"工具使用该文件夹来存储它的信息和还原点。
计算机的每个分区上都会有一个SystemVolumeInformation文件夹。

…………
不过,这些地方没必要去查看的……不会有你需要使用的文件。

TA的精华主题

TA的得分主题

发表于 2015-2-9 23:35 | 显示全部楼层
楼主我爱你,谢谢了

TA的精华主题

TA的得分主题

发表于 2015-2-10 19:56 | 显示全部楼层
学习了,好贴子,能做成工具箱或是做成插件就更好了

TA的精华主题

TA的得分主题

发表于 2015-2-11 17:06 | 显示全部楼层
高手就是高手。人生学习最悲哀的不过是:因为无知傲慢错过真正的好东西,又因为无知贪婪在假东西上耗费生命。

TA的精华主题

TA的得分主题

发表于 2015-2-20 17:50 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
仔细测试,一点一点的理解。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-15 01:50 , Processed in 0.037595 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表