2010-11-16 17 views
14

Beh qui è il mio codice, ma non riesco proprio a filtrare l'elenco utilizzando l'objFile.Extension io sono sicuro che è una cosa stupidalista Vbscript tutti i file PDF in cartelle e sottocartelle

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 

Sulla corsa ritorna con l'errore

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

risposta

24

Ti consigliamo di utilizzare il metodo GetExtensionName sull'oggetto FileSystemObject.

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

Nel tuo esempio, provare a utilizzare questa

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

Grazie Giovanni che l'ha fatto ma sto riscontrando problemi nel cercare di filtrare le sottocartelle che non ho molta fortuna – John

+1

Puoi essere più specifico? Stai ricevendo errori o qualcos'altro? – jveazey

1

C'è una risposta ben documentata alla tua domanda al seguente 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

La risposta mostrata a tale URL è una specie di complicato e utilizza WMI (Strumentazione gestione Windows) per iterare attraverso file e cartelle. Ma se si esegue molta amministrazione di Windows, vale la pena di imparare WMI.

Sto postando questo ora nel caso in cui hai bisogno di qualcosa in questo momento; ma penso che usassi un approccio basato su filesystemobject, e cercherò qualche esempio, e lo posterò più tardi se lo trovo.

Spero che questo sia utile.

11

(Per coloro che inciampano su questo dal tuo motore di ricerca di scelta)

Questa tracce solo ricorsivamente giù la cartella, quindi non è necessario duplicare il codice di due volte. Anche la logica dei PO è inutilmente complessa.

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

L'estensione del file può essere caso sentive ... ma il codice funziona.

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

Controllare questo codice:

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

non può aiutare OP, ma si spera che altri potrebbero trovare questo utile:

corsa

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

utilizzando oggetto guscio

StdOut wi ll contiene tutti i file PDF

+0

Come faccio a sapere chi ha downvoted questo? Vorrei sapere perché. – tnana

Problemi correlati