2009-09-16 9 views
6

Ok, Ive ha un vbscript che scorre attraverso una directory e le sue sottocartelle per recuperare un elenco di file. Esempio qui:VBScript per iterare tramite Set livello di sottocartelle

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 

Ora, questo è grande per ottenere una lunga lista, ma orribile sulle prestazioni se v'è una gerarchia cartella di profondità.

Quindi la mia domanda è, c'è un modo per modificare questa parte dello script in modo che iterato solo attraverso un determinato numero di livelli di sottocartelle? A causa della profondità delle strutture delle cartelle, una quantità ideale di livelli per scavare verso il basso sarebbe di 3 livelli.

risposta

13

Lascia la tua chiamata ricorsiva una condizione di uscita 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

È possibile calcolare la profondità di cartella contando il numero di backslash nel percorso ... quindi qualcosa di simile al seguito:

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