2010-11-16 8 views
14

Ну вот мой код, но я просто не могу отфильтровать список с помощью objFile.Extension я уверен, что некоторые вещи глупосписок Vbscript все PDF-файлы в папку и вложенные папки

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 runtime error: Object doesn't support this property or method: 'objFile.Extension'

ответ

24

Вы хотите использовать метод 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 
+0

Спасибо John, что сделал это но у меня проблемы с фильтрацией вложенных папок. Мне не очень повезло. – John

+1

Можете ли вы уточнить? Вы получаете ошибки или что-то еще? – jveazey

1

Там очень хорошо документированы ответ на ваш вопрос по этому адресу:

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.

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

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

11

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

Это просто рекурсивно прослеживает вниз папку, так что вам не нужно дублировать код дважды. Также логика OPs излишне сложна.

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 
2
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 
4

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

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 
1

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

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

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

пробег

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

используя объект оболочки

StdOut wi ll содержат все файлы PDF

+0

Как узнать, кто это сделал? Хотелось бы знать, почему. – tnana