Iterar todos los archivos en un directorio usando un bucle 'for'
¿Cómo puedo iterar sobre cada archivo en un directorio usando un for
bucle?
¿Y cómo puedo saber si una determinada entrada es un directorio o si es sólo un archivo?
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)
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
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.
Existe una sutil diferencia entre ejecutar FOR
desde 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