Cómo hacer algo a cada archivo en un directorio con un script por lotes

¿Cómo se itera sobre cada archivo en un directorio con un archivo .bat o .cmd?

Para simplificar, proporcione una respuesta que solo haga eco del nombre del archivo o la ruta del archivo.

Uso de línea de comando:

for /f %f in (`dir /bc:\`) do echo %f 

Uso del archivo por lotes:

 for /f %%f in (`dir /bc:\`) do echo %%f 

Actualización : si el directorio contiene archivos con espacio en los nombres, debe cambiar el delimitador que está usando el comando for /f . por ejemplo, puede usar el char de tubería.

 for /f "delims=|" %%f in ('dir /bc:\') do echo %%f 

Actualización 2 : (rápido un año y medio después de la respuesta original :-)) Si el nombre del directorio tiene un espacio en el nombre, puede usar la opción usebackq en el for :

 for /f "usebackq delims=|" %%f in (`dir /b "c:\program files"`) do echo %%f 

Y si necesita usar la redirección de salida o la tubería de comando, use el escape char ( ^ ):

 for /f "usebackq delims=|" %%f in (`dir /b "c:\program files" ^| findstr /i microsoft`) do echo %%f 

Alternativamente, use:

 forfiles /s /m *.png /c "cmd /c echo @path" 

El comando forfiles está disponible en Windows Vista y Windows 7.

El método más fácil:

Desde la línea de comando, usa:

 for %f in (*.*) do echo %f 

Desde un archivo de proceso por lotes (duplicar los signos de% de porcentaje):

 for %%f in (*.*) do echo %%f 

Desde un archivo por lotes con una carpeta especificada como primer parámetro:

 for %%f in (%1\*.*) do echo %%f 

Utilizar

 for /r path %%var in (*.*) do some_command %%var 

con:

  • camino siendo el camino inicial.
  • %% var es un identificador.
  • *. * siendo una máscara de archivo O el contenido de una variable.
  • some_command es el comando para ejecutar con la ruta y var concatenado como parámetros.

De otra manera:

 for %f in (*.mp4) do call ffmpeg -i "%~f" -vcodec copy -acodec copy "%~nf.avi" 

Tenía un malware que marcaba todos los archivos en un directorio como hidden / system / readonly. Si alguien más se encuentra en esta situación, cd en el directorio y ejecute for /f "delims=|" %f in ('forfiles') do attrib -s -h -r %f for /f "delims=|" %f in ('forfiles') do attrib -s -h -r %f .