Vbscript список всех файлов PDF в папке и подпапках - PullRequest
15 голосов
/ 17 ноября 2010

Ну вот мой код, но я просто не могу отфильтровать листинг с помощью 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'

Ответы [ 7 ]

24 голосов
/ 17 ноября 2010

Вы захотите использовать метод GetExtensionName для объекта FileSystemObject.

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
11 голосов
/ 20 ноября 2011

(для тех, кто наткнулся на это из выбранной вами поисковой системы)

Это просто рекурсивно отслеживает папку, поэтому вам не нужно дублировать код дважды. Также логика ОП неоправданно сложна.

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
4 голосов
/ 12 июля 2013

Расширение файла может быть чувствительным к регистру ... но код работает.

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
2 голосов
/ 27 августа 2016

Может не помочь OP, но, надеюсь, другие могут найти это полезным:

запустить

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

с использованием объекта оболочки

StdOut будет содержать все файлы PDF

2 голосов
/ 29 февраля 2012
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
1 голос
/ 21 августа 2013

Проверьте этот код:

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
1 голос
/ 05 июня 2011

На этот 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.

Я публикую это сейчас, если вам что-то нужно прямо сейчас;но я думаю, что раньше использовал подход, основанный на объектах файловой системы, и я поищу некоторый пример, и я опубликую его позже, если найду его.

Я надеюсь, что это полезно.

...