2013-02-19 132 views
2

内访问子文件夹的文件我写了这个代码来访问一个文件夹中的Excel文件:递归文件夹

strPath="C:\Test\" 

Set objFso = CreateObject("Scripting.FileSystemObject") 
Set objFolder = objFso.GetFolder (strPath) 
Set objExcel= CreateObject("Excel.Application") 
objExcel.Visible= False 

For Each objFile In objFolder.Files 
If objFso.GetExtensionName(objFile.Path) = "xls" Then 

现在我要创造一些子文件夹,并把一些.xls文件中的。

我应该在我的代码中做什么修改来搜索主文件夹和所有其他子文件夹中的文件(子文件夹内还有一些文件夹)?

回答

16

这实际上是一个很好解决的问题。递归意味着你创建了一个自引用函数(一个自称的函数)。在你的情况下,你会为​​当前文件夹的每个子文件夹调用它自己的函数。

TraverseFolders objFso.GetFolder(strPath) 

Function TraverseFolders(fldr) 
    ' do stuff with the files in fldr here, or ... 

    For Each sf In fldr.SubFolders 
    TraverseFolders sf '<- recurse here 
    Next 

    ' ... do stuff with the files in fldr here. 
End Function 
+2

+1简单6行,但非常有效,谢谢你没有引用搜索引擎。这个网站的用途是什么。 – glh 2013-02-20 06:58:10

-4

运行这在你的脚本开始,它会列出所有文件夹中的所有文件:

dir /S/B > AllFoldersAndFiles.txt 

然后通过文件列表循环。这对我有用。

递归vb有点棘手。

+3

无论OP要求提供一个VB解决方案*还是已经存在的已批准解决方案,您的答案都不会增加太多。 – 2015-09-10 13:50:53

+1

这是一种可能的方法(提供比在某些情况下使用'FileSystemObject'更好的性能),但是太不完整,无法在问题的上下文中使用。一方面,你不能直接在VBScript中直接输入命令,并且你必须为它添加'cmd/c',因为'cmd.exe'提供了'dir'和重定向。此外,OP正在寻找具有特定扩展名的文件,这并未反映在您的陈述中。 – 2015-09-11 21:59:28