vbscript folder subfolder directory-listing

Vbscript enumera todos los archivos PDF en la carpeta y subcarpetas



folder subfolder (7)

Bueno, aquí está mi código, pero simplemente no puedo filtrar el listado usando objFile.Extension, estoy seguro de que es algo tonto

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 funcionamiento, vuelve con el error

(11, 1) Error de tiempo de ejecución de Microsoft VBScript: el objeto no admite esta propiedad o método: ''objFile.Extension''


Querrá utilizar el método GetExtensionName en el objeto FileSystemObject.

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

En tu ejemplo, intenta usar esto

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


Hay una respuesta bien documentada a su pregunta en esta 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 respuesta que se muestra en esa URL es algo complicada y utiliza WMI (Windows Management Instrumentation) para recorrer los archivos y las carpetas. Pero si hace mucha administración de Windows, vale la pena el esfuerzo para aprender WMI.

Estoy publicando esto ahora en caso de que necesite algo ahora mismo; pero creo que solía usar un enfoque basado en el sistema de archivos y voy a buscar algún ejemplo, y lo publicaré más adelante si lo encuentro.

Espero que esto sea útil.


(Para aquellos que tropiezan con esto desde su motor de búsqueda de elección)

Esto rastrea recursivamente la carpeta, por lo que no necesita duplicar el código dos veces. Además, la lógica de OP es innecesariamente compleja.

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


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


Verifique este código:

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


La extensión de archivo puede ser mayúscula ... pero el código funciona.

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


Puede que no ayude a OP, pero esperamos que a otros les pueda resultar útil:

correr

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

usando un objeto shell

StdOut contendrá todos los archivos PDF