2013-02-19 163 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