2009-09-16 56 views
6

好吧,我有一个vbscript迭代通过目录及其子文件夹来检索文件列表。 例这里: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个级别。

回答

13

给你的递归调用退出条件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

您可以通过路径计算反斜杠的数量计算的文件夹深度...所以像下面:

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