Jak*_*ake 28 vba filesystemobject
我正在寻找一个VBA脚本,它将循环遍历指定文件夹的所有子文件夹.当我说所有子文件夹时,我指的是指定文件夹中的每个文件夹,以及其中的每个文件夹,以及其中的每个文件夹...理论上可能存在无限的嵌套子文件夹,但实际上它可能不会超过3或4.我使用VBA脚本运行的对象,所以,一旦我循环到该文件夹,我可以检查一些文件的属性(但我知道如何做到这一点的一部分).
谢谢您的帮助!
这个问题与包含已知目录的先前问题中列出的"类似"问题不同,而这里需要找到已知和未知的目录.还需要多层子目录.你们真的应该在解开"重复"之前阅读这个问题.
Ric*_*ich 81
只是一个简单的文件夹向下钻取
sub sample()
Dim FileSystem As Object
Dim HostFolder As String
HostFolder = "C:\"
Set FileSystem = CreateObject("Scripting.FileSystemObject")
DoFolder FileSystem.GetFolder(HostFolder)
end sub
Sub DoFolder(Folder)
Dim SubFolder
For Each SubFolder In Folder.SubFolders
DoFolder SubFolder
Next
Dim File
For Each File In Folder.Files
' Operate on each file
Next
End Sub
Run Code Online (Sandbox Code Playgroud)
Cor*_*mey 32
并补充Rich的递归答案,一种非递归方法.
Public Sub NonRecursiveMethod()
Dim fso, oFolder, oSubfolder, oFile, queue As Collection
Set fso = CreateObject("Scripting.FileSystemObject")
Set queue = New Collection
queue.Add fso.GetFolder("your folder path variable") 'obviously replace
Do While queue.Count > 0
Set oFolder = queue(1)
queue.Remove 1 'dequeue
'...insert any folder processing code here...
For Each oSubfolder In oFolder.SubFolders
queue.Add oSubfolder 'enqueue
Next oSubfolder
For Each oFile In oFolder.Files
'...insert any file processing code here...
Next oFile
Loop
End Sub
Run Code Online (Sandbox Code Playgroud)
您可以使用FIFO行为(如上图所示)队列,或者您可以使用后进先出法的行为栈会以相同的顺序为递归方法处理(替换Set oFolder = queue(1)用Set oFolder = queue(queue.Count)和替换queue.Remove(1)用queue.Remove(queue.Count),并可能重命名变量...)