2009-09-16 11 views
6

Ok, mam vbscript, który iteruje przez katalog i jego podfoldery, aby pobrać listę plików. Przykład tutaj:VBScript do iteracji poprzez Ustaw poziom podfolderów

Set FSO = CreateObject("Scripting.FileSystemObject") 
ShowSubfolders FSO.GetFolder("C:\Scripts") 

Sub ShowSubFolders(Folder) 
    For Each Subfolder in Folder.SubFolders 
     Wscript.Echo Subfolder.Path 
     ShowSubFolders Subfolder 
    Next 
End Sub 

Teraz jest świetne do poruszania obszerną listę, ale straszne na wydajność, jeśli istnieje głęboka folderu hierarchia.

Moje pytanie brzmi, czy istnieje sposób na edycję tej części skryptu, aby była wykonywana tylko przez określoną liczbę poziomów podfolderów? Ze względu na głębokość struktur folderów idealna ilość poziomów do przechodzenia w dół to 3 poziomy.

Odpowiedz

13

Nadaj wywołanie rekurencyjne warunek wyjścia ala

Set FSO = CreateObject("Scripting.FileSystemObject") 
ShowSubfolders FSO.GetFolder("C:\Scripts"), 3 

Sub ShowSubFolders(Folder, Depth) 
    If Depth > 0 then 
     For Each Subfolder in Folder.SubFolders 
      Wscript.Echo Subfolder.Path 
      ShowSubFolders Subfolder, Depth -1 
     Next 
    End if 
End Sub 
0

można obliczyć głębokość folderu zliczając liczbę ukośniki w ścieżce ... więc coś jak poniżej:

Set objFSO = CreateObject("Scripting.FileSystemObject") 
objStartFolder = "C:\Scripts" 

Set objFolder = objFSO.GetFolder(objStartFolder) 

ShowSubfolders objFSO.GetFolder(objStartFolder) 

Sub ShowSubFolders(Folder) 
    For Each Subfolder in Folder.SubFolders 
     ' FolderDepth = (Length of current folder path) - (number if backslashes in current folder path) - (number of backslahes in path you have specified for objStartFolder) 
     FolderDepth = len(Subfolder.Path) - len(replace(Subfolder.Path,"\","")) - 1 
     ' Specifying FolderDepth = 1 will give everything inside your objStartFolder 
     If FolderDepth = 1 then 
      Wscript.Echo Subfolder.Path 
     End If 
     ShowSubFolders Subfolder 
    Next 
End Sub 
Powiązane problemy