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


Cómo iterar sobre cada archivo en un directorio con a .bat or .archivo cmd?

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

Author: Ross Ridge, 2008-10-08

6 answers

Uso de la línea de comandos:

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

Uso del archivo por lotes:

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

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

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

Actualización 2: (rápido un año y medio después de la respuesta original: -)) Si el nombre del directorio en sí 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 redirección de salida o tubería de comandos, utilice el carácter de escape (^):

for /f "usebackq delims=|" %%f in (`dir /b "c:\program files" ^| findstr /i microsoft`) do echo %%f
 315
Author: Franci Penov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-07 20:58:26

Alternativamente, use:

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

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

 82
Author: Paul Houx,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-18 23:22:13

Método más fácil:

Desde la Línea de Comandos, use:

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

De un archivo por lotes (duplica los signos % percent):

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

De un archivo por lotes con una carpeta especificada como 1er parámetro:

for %%f in (%1\*.*) do echo %%f
 46
Author: Gordon Bell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-25 17:47:29

Use

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

Con:

  • path es la ruta inicial.
  • %%var es algún identificador.
  • *.* ser una máscara de archivo O el contenido de una variable.
  • some_command es el comando a ejecutar con la ruta y var concatenado como parámetros.
 30
Author: mstrobl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-07 22:56:57

Otra manera:

for %f in (*.mp4) do call ffmpeg -i "%~f" -vcodec copy -acodec copy "%~nf.avi"
 5
Author: thistleknot,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-22 09:01:31

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

 -2
Author: Anon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-14 21:30:20