Recorrer el contenido de una carpeta con DIR

Usar la función DIR para recorrer archivos y carpetas

 

La función DIR de Basic nos permite recorrer una carpeta y averiguar cual es su contenido.

Podemos obtener los archivos que contiene, las carpetas que contiene, y utilizar comodines para filtrar los resultados obtenidos.

La función DIR de oooBasic acepta dos parámetros o argumentos:
  1. La ruta del directorio a explorar, o la ruta y nombre del archivo que ha de buscar. Admite el uso de comodines (* e ?)
  2. El tipo de resueltado devuelto: si especificamos un 0 devuelve archivos; un 16 devuelve carpetas.

Devuelve una cadena que contiene el resultado encontrado, o una cadena vacía cuando no encuentra nada o ha recorrido todo el directorio.

Cuando como primer argumento se le indica una carpeta (con o sin comodines) o una ruta y nombre de archivo con comodines, tiene un funcionamiento un poco especial, que nos permite recorrer la carpeta:

  • Cuando se llama a la función DIR por primera vez indicando los argumentos devuelve la primera ocurrencia que cumple los parámetros especificados
  • Si se la vuelve a llamar sin parámetros devuelve la segunda (y sucesivas) ocurrencias, hasta recorrer todo el directorio.

Ejemplos de código macro con DIR

Recorrer todos los archivos de una carpeta

Sub EjemploDir()

    Dim cArchivo As String

    cArchivo = Dir("C:\Program Files\OpenOffice 4\", 0)

    Do While cArchivo>""
        MsgBox cArchivo
        cArchivo=Dir
    Loop

    MsgBox "No quedan más archivos"

End Sub

Obtendremos todos los archivos de la carpeta; no es necesario utilizar comodines.

Recorrer todas las carpetas de una carpeta

Sub EjemploDir()

    Dim cArchivo As String

    cArchivo = Dir("C:\Program Files\OpenOffice 4\", 16)

    Do While cArchivo>""
        MsgBox cArchivo
        cArchivo=Dir
    Loop

    MsgBox "No quedan más archivos"

End Sub

En este caso obtendremos también las rutas . y .. como resultado. No es necesario utilizar comodines.

Recorrer todos los archivos de una carpeta con comodines

Sub EjemploDir()

    Dim cArchivo As String

    cArchivo = Dir("C:\Program Files\OpenOffice 4\*.txt", 0)

    Do While cArchivo>""
        MsgBox cArchivo
        cArchivo=Dir
    Loop

    MsgBox "No quedan más archivos"

End Sub

Obtendremos todos los archivos con extensión .txt de la carpeta

Recorrer todas las carpetas de una carpeta con comodines

Sub EjemploDir()

    Dim cArchivo As String

    cArchivo = Dir("C:\Program Files\OpenOffice 4\p*", 16)

    Do While cArchivo>""
        MsgBox cArchivo
        cArchivo=Dir
    Loop

    MsgBox "No quedan más archivos"

End Sub

Obtendremos todos los directorios que comiencen por la letra p de la carpeta.

Diferencias con la función DIR de VBA

Cuando indicamos en el segundo argumento el valor 16 (carpetas) tan sólo nos devuelve las carpetas; VBA devuelve carpetas y archivos. Si se especifica la directiva del compilador CompatibilityMode como True, su comportamiento es idéntico al de VBA.

En VBA el segundo argumento admite más tipos de valores, para devolver archivos ocultos, del sistema, etc. Estas opciones no funcionan en oooBasic, ya que estas características no existen en todos los sistemas operativos en los que se ejecuta AOO.

Uso de DIR con los comodines * e ?

Los comodines admitidos son:

  • * Significa ningún, uno o cualquier número de carácteres alfanuméricos.
  • ? Significa un único caracter alfanumérico en esa posición.

Por ejemplo:

Para recorrer Comodines
Todos los documentos de Calc *.ods
Todos los documentos que comienzan por Informe Informe*.*
Todas las carpetas que comienzan por Informe Informe*
Todas las carpetas que contienen 2014 *2014*
Todos los documentos que terminan por 2014 *2014.*
Todos los documentos Opendocument de AOO *.od?

5 comentarios

Comentario De: Gualberto [Visitante]

oye me puedes ayudar tengo una macro que usa do while y la funcion dir al final cuando ejemplo myfile = Dir

y tengo vairas facturas en la primera vuelta del circuito cuando llega a esta funcion Dir ya no tiene valor y se sale del ciclo como mantener el valor de dir hasta que se cumpla todas las facturas el ciclo.

05.03.16 @ 19:15 Reply to this comment
Comentario De: [Miembro]

Hola Gualberto
En este tema tienes un ejemplo claro de como crear un bucle do while para obtener todas las facturas de una carpeta.
Para ejecutar cualquier proceso con los archivos, debes llamarlo justo después de aplicar el dir, no al final del bucle.

05.03.16 @ 21:35 Reply to this comment
Comentario De: Gualberto [Visitante]

Buen día SLV,

Agradezco tu comentario pero la verdad como tu me dices es de acuerdo al ejemplo pero, de esa forma ya lo intente pero no funciono, si tu te basaste al ejemplo. Mi macro tiene mucho mas código dentro del bucle, lo que me refiero es que la función Dir, sigue avanzando su recorrido sobre la carpeta indicada en la ruta, hasta que su valor es nada y esto lo hace ya sea que este después de lo que comentas, o al final del bucle. Podrías indicarme otro forma para detener el recorrido o como hacer que al final solo tome la segunda factura de mi carpeta.

Agradecere tu apoyo nuevamente o quien desee.

09.03.16 @ 16:40 Reply to this comment
Comentario De: sergi [Visitante]

buenas tardes. Muchas gracias por la información.
He probado la rutina y me va de lujo, pero, ¿existe algun sistema para buscar un archivo dentro de las carpetas y las subcarpetas?

muchas gracias

05.05.16 @ 19:39 Reply to this comment
Comentario De: Carlos [Visitante]

Hola, muchas gracias por esta información.

¿Puedes decirme si también funcionaría con Thisworkbook.path & "*xlsx" ?
Es que estoy probando y no sé si estoy haciendo algo mal o es porque no funciona con este método.

Muchas gracias

30.05.21 @ 14:03 Reply to this comment


Form is loading...