【问题标题】:Vbscript list all PDF files in folder and subfoldersVbscript列出文件夹和子文件夹中的所有PDF文件
【发布时间】:2011-05-11 03:29:11
【问题描述】:

这是我的代码,但我无法使用 objFile.Extension 过滤列表,我确信这很愚蠢

Set objFSO = CreateObject("Scripting.FileSystemObject")
objStartFolder = "C:\dev"

Set objFolder = objFSO.GetFolder(objStartFolder)
Wscript.Echo objFolder.Path

Set colFiles = objFolder.Files

For Each objFile in colFiles
If objFile.Extension = "PDF" Then
    Wscript.Echo objFile.Name
    End If
Next
Wscript.Echo

ShowSubfolders objFSO.GetFolder(objStartFolder)

Sub ShowSubFolders(Folder)
    For Each Subfolder in Folder.SubFolders
        Wscript.Echo Subfolder.Path
        Set objFolder = objFSO.GetFolder(Subfolder.Path)
        Set colFiles = objFolder.Files
        For Each objFile in colFiles
            Wscript.Echo objFile.Name
        Next
        Wscript.Echo
        ShowSubFolders Subfolder
    Next
End Sub

运行时返回错误

(11, 1) Microsoft VBScript 运行时错误:对象不支持 属性或方法:'objFile.Extension'

【问题讨论】:

    标签: vbscript directory subdirectory directory-listing


    【解决方案1】:

    您需要在 FileSystemObject 对象上使用GetExtensionName 方法。

    Set x = CreateObject("scripting.filesystemobject")
    WScript.Echo x.GetExtensionName("foo.pdf")
    

    在你的例子中,尝试使用这个

    For Each objFile in colFiles
        If UCase(objFSO.GetExtensionName(objFile.name)) = "PDF" Then
            Wscript.Echo objFile.Name
        End If
    Next
    

    【讨论】:

    • 感谢 John,但我在尝试过滤子文件夹时遇到问题,我运气不佳
    • 你能说得更具体点吗?您是否遇到错误或其他问题?
    【解决方案2】:

    (对于那些从您选择的搜索引擎中偶然发现的人)

    这只是递归地跟踪文件夹,所以你不需要重复你的代码两次。 OP 逻辑也不必要地复杂。

    Wscript.Echo "begin."
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objSuperFolder = objFSO.GetFolder(WScript.Arguments(0))
    Call ShowSubfolders (objSuperFolder)
    
    Wscript.Echo "end."
    
    WScript.Quit 0
    
    Sub ShowSubFolders(fFolder)
        Set objFolder = objFSO.GetFolder(fFolder.Path)
        Set colFiles = objFolder.Files
        For Each objFile in colFiles
            If UCase(objFSO.GetExtensionName(objFile.name)) = "PDF" Then
                Wscript.Echo objFile.Name
            End If
        Next
    
        For Each Subfolder in fFolder.SubFolders
            ShowSubFolders(Subfolder)
        Next
    End Sub
    

    【讨论】:

      【解决方案3】:

      文件扩展名可能区分大小写...但代码有效。

      Set objFSO = CreateObject("Scripting.FileSystemObject")
        objStartFolder = "C:\Dev\"
      
        Set objFolder = objFSO.GetFolder(objStartFolder)
        Wscript.Echo objFolder.Path
      
        Set colFiles = objFolder.Files
      
        For Each objFile in colFiles
        strFileName = objFile.Name
      
        If objFSO.GetExtensionName(strFileName) = "pdf" Then
            Wscript.Echo objFile.Name
        End If
      
        Next
        Wscript.Echo
      
        ShowSubfolders objFSO.GetFolder(objStartFolder)
      
        Sub ShowSubFolders(Folder)
           For Each Subfolder in Folder.SubFolders
                Wscript.Echo Subfolder.Path
                Set objFolder = objFSO.GetFolder(Subfolder.Path)
                Set colFiles = objFolder.Files
                For Each objFile in colFiles
                    Wscript.Echo objFile.Name
                Next
                Wscript.Echo
                ShowSubFolders Subfolder
            Next
        End Sub
      

      【讨论】:

        【解决方案4】:
        Set objFSO = CreateObject("Scripting.FileSystemObject")
        objStartFolder = "C:\Users\NOLA BOOTHE\My Documents\operating system"
        
        Set objFolder = objFSO.GetFolder(objStartFolder)
        
        Set colFiles = objFolder.Files
        For Each objFile in colFiles
            Wscript.Echo objFile.Name
        Next
        

        【讨论】:

          【解决方案5】:

          可能对 OP 没有帮助,但希望其他人会觉得这有帮助:

          运行

          %ComSpec% /c cd/d StartPath & dir/s/b *.pdf
          

          使用外壳对象

          StdOut 将包含所有 PDF 文件

          【讨论】:

          • 我如何找出谁反对这个?想知道为什么。
          【解决方案6】:

          在这个 url 上有一个有据可查的回答你的问题:

          http://blogs.technet.com/b/heyscriptingguy/archive/2005/02/18/how-can-i-list-the-files-in-a-folder-and-all-its-subfolders.aspx

          该 URL 上显示的答案有点复杂,并且使用 WMI(Windows 管理规范)来遍历文件和文件夹。但是,如果您从事大量 Windows 管理工作,那么学习 WMI 是值得的。

          我现在发布这个,以防你现在需要什么;但我想我曾经使用基于文件系统对象的方法,我会寻找一些示例,如果找到了我会在稍后发布。

          我希望这会有所帮助。

          【讨论】:

            【解决方案7】:

            检查此代码:

            Set objFSO = CreateObject("Scripting.FileSystemObject") 
            
            objStartFolder = "C:\Folder1\"
            
            Set objFolder = objFSO.GetFolder(objStartFolder)
            
            Set colFiles = objFolder.Files
            
            For Each objFile in colFiles 
                strFileName = objFile.Name
            
                If objFSO.GetExtensionName(strFileName) = "pdf" Then 
                    Wscript.Echo objFile.Name 
                End If
            Next
            
            ShowSubfolders objFSO.GetFolder(objStartFolder)
            
            Sub ShowSubFolders(Folder)
            
                For Each Subfolder in Folder.SubFolders 
                    Set objFolder = objFSO.GetFolder(Subfolder.Path) 
                    Set colFiles = objFolder.Files 
                    for each Files in colFiles 
                        if LCase(InStr(1,Files, ".pdf")) > 1 then Wscript.Echo Files 
                    next
                    ShowSubFolders Subfolder 
                Next 
            End Sub
            

            【讨论】:

              猜你喜欢
              • 2020-07-02
              • 1970-01-01
              • 2016-02-26
              • 2018-08-06
              • 2013-05-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-06-06
              相关资源
              最近更新 更多