递归访问文件夹内的子文件夹中的文件

4

我已经编写了以下代码来访问文件夹中的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 文件放入其中。

我应该如何修改我的代码,以便在主文件夹和所有其他子文件夹中搜索文件(还有一些子文件夹中的文件夹)?

2个回答

19

实际上,这是一个已经解决得很好的问题。递归意味着创建一个自引用函数(一个调用自身的函数)。在您的情况下,您将使该函数调用当前文件夹的每个子文件夹。

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
只用 6 行代码就能简单而有效地实现,感谢您没有引用搜索引擎。这正是本网站的宗旨。 - glh

-5

在脚本开始时运行此命令,它将列出所有文件夹中的所有文件:

dir /S/B > AllFoldersAndFiles.txt

然后循环遍历文件列表。这对我有效。

递归VB有点棘手。


5
鉴于提问者要求提供Visual Basic解决方案,并且已经有一个批准的解决方案,您的答案没有太多的补充。 - Jan Doggen
1
这是一种可能的方法(在某些情况下比使用FileSystemObject提供更好的性能),但过于不完整,无法在问题的上下文中使用。首先,您不能直接将命令放入VBScript中,必须添加cmd /c,因为dir和重定向由cmd.exe提供。此外,OP正在寻找具有特定扩展名的文件,而这并未反映在您的语句中。 - Ansgar Wiechers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接