2010-11-16 45 views
14

est bien ici mon code, mais je ne peux pas filtrer la liste en utilisant le objFile.Extension je suis sûr qu'il est quelque chose stupideliste Vbscript tous les fichiers PDF dans le dossier et les sous-dossiers

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 

Le terme, il revient avec l'erreur

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

Répondre

24

Vous voulez utiliser la méthode GetExtensionName sur l'objet FileSystemObject.

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

Dans votre exemple, essayez d'utiliser cette

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

Merci John qui l'a fait mais j'ai des problèmes pour essayer de filtrer les sous-dossiers Je n'ai pas beaucoup de chance – John

+1

Pouvez-vous être plus précis? Recevez-vous des erreurs ou autre chose? – jveazey

1

Il y a une réponse bien documentée à votre question à l'adresse suivante:

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 réponse montré à cette URL est une sorte de complexité et utilise WMI (Windows Management Instrumentation) pour itérer à travers les fichiers et dossiers. Mais si vous faites beaucoup d'administration Windows, cela vaut la peine d'apprendre WMI.

Je poste ceci maintenant au cas où vous auriez besoin de quelque chose maintenant; mais je pense que j'avais l'habitude d'utiliser une approche basée sur un système de fichiers, et je vais chercher un exemple, et je posterai plus tard si je le trouve.

J'espère que c'est utile.

11

(Pour ceux qui trébuchent sur ce de votre moteur de recherche de choix)

Ce que des traces récursive sur le dossier, de sorte que vous n'avez pas besoin de dupliquer votre code deux fois. En outre, la logique OP est inutilement complexe.

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'extension de fichier peut être le cas sentive ... mais le code fonctionne.

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

Vérifiez ce code:

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

ne peut pas aider OP, mais nous espérons que d'autres peuvent trouver cela utile:

run

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

utilisant l'objet shell

StdOut wi Je vais contenir tous les fichiers PDF

+0

Comment puis-je savoir qui a déprécié cela? Aimerais savoir pourquoi. – tnana