2009-09-16 29 views
6

Ok, tengo un vbscript que itera a través de un directorio y sus subcarpetas para recuperar una lista de archivos. Ejemplo aquí:VBScript para iterar a través de establecer el nivel de las subcarpetas

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 

Ahora bien, esto es ideal para obtener una lista extensa, pero horrible en el rendimiento si hay una jerarquía de carpetas de profundidad.

Así que mi pregunta es, ¿hay alguna manera de editar esta parte del script para que solo se repita a través de un número determinado de niveles de subcarpetas? Debido a la profundidad de las estructuras de carpetas, una cantidad ideal de niveles para profundizar sería de 3 niveles.

Respuesta

13

Dé su llamada recursiva una condición de salida del 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

Se puede calcular la profundidad de carpetas mediante el recuento del número de barras invertidas en el camino ... así que algo como el siguiente:

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 
Cuestiones relacionadas