Iterar todos los archivos en un directorio usando un bucle 'for'

Resuelto Vhaerun asked hace 16 años • 17 respuestas

¿Cómo puedo iterar sobre cada archivo en un directorio usando un forbucle?

¿Y cómo puedo saber si una determinada entrada es un directorio o si es sólo un archivo?

Vhaerun avatar Sep 26 '08 16:09 Vhaerun
Aceptado

Esto enumera todos los archivos (y solo los archivos) en el directorio actual y sus subdirectorios de forma recursiva:

for /r %i in (*) do echo %i

Además, si ejecuta ese comando en un archivo por lotes, deberá duplicar los signos%.

for /r %%i in (*) do echo %%i

(gracias @agnul)

jop avatar Sep 26 '2008 09:09 jop

Iterar a través...

  • ...archivos en el directorio actual:for %f in (.\*) do @echo %f
  • ...subdirectorios en el directorio actual:for /D %s in (.\*) do @echo %s
  • ... archivos en los subdirectorios actuales y en todos los subdirectorios:for /R %f in (.\*) do @echo %f
  • ...subdirectorios en los subdirectorios actuales y en todos:for /R /D %s in (.\*) do @echo %s

Lamentablemente, no encontré ninguna forma de iterar sobre archivos y subdirectorios al mismo tiempo.

Simplemente use cygwin con su bash para obtener muchas más funciones.

Aparte de esto: ¿Notaste que la ayuda integrada de MS Windows es un gran recurso para descripciones de la sintaxis de la línea de comandos de cmd?

También eche un vistazo aquí: http://technet.microsoft.com/en-us/library/bb490890.aspx

Marco avatar Sep 26 '2008 10:09 Marco

Para iterar sobre cada archivo funcionará un bucle for:

for %%f in (directory\path\*) do ( something_here )

En mi caso también quería el contenido del archivo, nombre, etc.

Esto generó algunos problemas y pensé que mi caso de uso podría ayudar. Aquí hay un bucle que lee información de cada archivo '.txt' en un directorio y le permite hacer algo con él (setx, por ejemplo).

@ECHO OFF
setlocal enabledelayedexpansion
for %%f in (directory\path\*.txt) do (
  set /p val=<%%f
  echo "fullname: %%f"
  echo "name: %%~nf"
  echo "contents: !val!"
)

*Limitación: val<=%%f solo obtendrá la primera línea del archivo.

Aaron Votre avatar May 10 '2016 13:05 Aaron Votre

Existe una sutil diferencia entre ejecutar FORdesde la línea de comandos y desde un archivo por lotes. En un archivo por lotes, debe colocar dos %caracteres delante de cada referencia de variable.

Desde una línea de comando:

FOR %i IN (*) DO ECHO %i

Desde un archivo por lotes:

FOR %%i IN (*) DO ECHO %%i
aphoria avatar Sep 26 '2008 11:09 aphoria