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

-4

Выполнить это в начале вашего скрипта, он будет список всех файлов во всех папках:

dir /S/B > AllFoldersAndFiles.txt 

затем цикл по списку файлов. Это работает для меня.

Рекурсивный vb немного сложный.

+3

Wih OP, предлагающий решение VB * и * уже утвержденное решение, ваш ответ не добавляет многого. –

+1

Это один из возможных подходов (обеспечивает лучшую производительность, чем использование «FileSystemObject» в некоторых сценариях), но слишком неполный, чтобы быть полезным в контексте вопроса. С одной стороны, вы не можете просто поместить команду непосредственно в VBScript, и вы должны добавить к ней 'cmd/c', потому что' dir' и перенаправление предоставляются 'cmd.exe'. Кроме того, OP ищет файлы с определенным расширением, которое не отражается в вашем статусе. –

Смежные вопросы