2010-11-16 16 views
14

Vâng đây là mã của tôi nhưng tôi chỉ không thể lọc danh sách bằng cách sử dụng objFile.Extension tôi chắc chắn nó là một số điều ngớ ngẩndanh sách VBScript tất cả các file PDF trong thư mục và thư mục con

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 

On chạy nó trở lại với lỗi

(11, 1) Microsoft VBScript runtime error: Object doesn't support this property or method: 'objFile.Extension'

Trả lời

24

Bạn sẽ muốn sử dụng phương pháp GetExtensionName trên đối tượng FileSystemObject.

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

Trong ví dụ của bạn, hãy thử sử dụng này

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

Cảm ơn John đã làm điều đó nhưng tôi gặp sự cố khi cố gắng lọc các thư mục con Tôi không có nhiều may mắn – John

+1

Bạn có thể cụ thể hơn không? Bạn đang nhận được lỗi hay cái gì khác? – jveazey

1

Có một câu trả lời cũng ghi nhận câu hỏi của bạn tại địa chỉ này:

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

Câu trả lời cho thấy tại URL đó là loại phức tạp và sử dụng WMI (Windows Management Instrumentation) để lặp qua các tập tin và thư mục. Nhưng nếu bạn làm rất nhiều việc quản trị Windows, bạn nên nỗ lực tìm hiểu WMI.

Tôi đang đăng nội dung này ngay bây giờ trong trường hợp bạn cần điều gì đó ngay bây giờ; nhưng tôi nghĩ rằng tôi sử dụng để sử dụng một phương pháp tiếp cận dựa trên filesystemobject, và tôi sẽ tìm một số ví dụ, và tôi sẽ đăng nó sau này nếu tôi tìm thấy nó.

Tôi hy vọng điều này hữu ích.

11

(Đối với những người vấp ngã này từ công cụ tìm kiếm của bạn lựa chọn)

này chỉ đệ quy dấu vết xuống thư mục, do đó bạn không cần phải lặp lại mã của bạn hai lần. Ngoài ra các logic OPs là không cần thiết phức tạp.

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

Các đuôi tệp có thể là trường hợp sentive ... nhưng mã hoạt động.

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

Kiểm tra mã này:

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

Có thể không giúp OP, nhưng hy vọng người khác có thể tìm thấy điều này hữu ích:

chạy

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

sử dụng đối tượng vỏ

StdOut wi sẽ chứa tất cả các tệp PDF

+0

Làm cách nào để tìm ra ai đã bỏ phiếu này? Muốn biết tại sao. – tnana