【问题标题】:Recursively access subfolder files inside a folder递归访问文件夹内的子文件夹文件
【发布时间】:2013-02-03 17:17:10
【问题描述】:

我已经编写了这段代码来访问文件夹中的 Excel 文件:

strPath="C:\Test\"

Set objFso = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFso.GetFolder (strPath)
Set objExcel= CreateObject("Excel.Application")
objExcel.Visible= False

For Each objFile In objFolder.Files
 If objFso.GetExtensionName(objFile.Path) = "xls" Then

现在我必须创建一些子文件夹并将一些 .xls 文件放入其中。

我应该在我的代码中进行哪些修改以在主文件夹和所有其他子文件夹中搜索文件(子文件夹中也有一些文件夹)?

【问题讨论】:

    标签: vbscript directory


    【解决方案1】:

    这其实是一个很好解决的问题。递归意味着您创建一个自引用函数(一个调用自身的函数)。在你的情况下,你会让函数为当前文件夹的每个子文件夹调用自己。

    TraverseFolders objFso.GetFolder(strPath)
    
    Function TraverseFolders(fldr)
      ' do stuff with the files in fldr here, or ...
    
      For Each sf In fldr.SubFolders
        TraverseFolders sf  '<- recurse here
      Next
    
      ' ... do stuff with the files in fldr here.
    End Function
    

    【讨论】:

    • +1 6 行简单但非常有效,感谢您没有参考搜索引擎。正是这个网站的用途。
    【解决方案2】:

    在脚本的开头运行它,它将列出所有文件夹中的所有文件:

    dir /S/B > AllFoldersAndFiles.txt
    

    然后遍历文件列表。这对我有用。

    递归 vb 有点棘手。

    【讨论】:

    • 如果 OP 要求 VB 解决方案并且已经存在已批准的解决方案,您的回答并没有增加太多。
    • 这是一种可能的方法(在某些情况下提供比使用 FileSystemObject 更好的性能),但在问题的上下文中太不完整了。一方面,您不能直接将命令放入 VBScript 中,您必须向其中添加 cmd /c,因为 dir 和重定向由 cmd.exe 提供。此外,OP 正在寻找具有特定扩展名的文件,这未反映在您的声明中。
    猜你喜欢
    • 2018-11-12
    • 2017-08-19
    • 2021-11-08
    • 2018-10-16
    • 2019-07-02
    • 1970-01-01
    • 2021-03-04
    相关资源
    最近更新 更多