web-dev-qa-db-fra.com

Vbscript liste tout PDF fichiers dans le dossier et les sous-dossiers

Eh bien voici mon code mais je ne peux tout simplement pas filtrer la liste à l’aide de objFile.Extension je suis sûr que c’est quelque chose de stupide

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

En marche, il revient avec l'erreur

(11, 1) Erreur d’exécution de Microsoft VBScript: L’objet ne prend pas en charge cela propriété ou méthode: 'objFile.Extension'

15
John

Vous voudrez 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 ceci

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

(Pour ceux qui tombent sur cela à partir du moteur de recherche de votre choix)

Cela ne fait que suivre récursivement le dossier, vous n'avez donc pas besoin de dupliquer votre code deux fois. De plus, la logique des PO 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
11
Seph

L'extension de fichier peut être sensible à la casse ... 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
4
user2574534

Peut ne pas aider OP, mais j'espère que d'autres pourront trouver cela utile:

courir

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

en utilisant un objet Shell

StdOut contiendra tous les fichiers PDF

2
tnana
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
2
Prince Boothe

Il existe une réponse bien documentée à votre question à cette adresse:

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 affichée à cette URL est un peu compliquée et utilise WMI (Windows Management Instrumentation) pour parcourir des fichiers et des dossiers. Mais si vous effectuez beaucoup d’administration Windows, vous devez 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 le posterai plus tard si je le trouve.

J'espère que ceci est utile.

1
user235218

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
Eric