Скрипт VBScript для перебора уровня вложенных папок. - PullRequest
6 голосов
/ 16 сентября 2009

Хорошо, у меня есть vbscript, который перебирает каталог и его подпапки, чтобы получить список файлов. Пример здесь:

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

Теперь это отлично подходит для получения обширного списка, но ужасно с точки зрения производительности, если есть глубокая иерархия папок.

Итак, мой вопрос: есть ли способ отредактировать эту часть сценария, чтобы он проходил только через определенное количество уровней подпапок? Из-за глубины структуры папок идеальное количество уровней, в которые можно углубиться, составило бы 3 уровня.

Ответы [ 2 ]

13 голосов
/ 16 сентября 2009

Дайте вашему рекурсивному вызову условие выхода 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
1 голос
/ 14 сентября 2013

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

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...