Cómo iterar sobre archivos en la consola de Windows

En Linux es habitual utilizar shell scripts para automatizar tareas que de otra forma nos llevarían mucho tiempo. En Windows no es tan común, pero no hay nada que nos lo impida. La sentencia for in do, por ejemplo, tiene una sintaxis muy parecida a la de Linux, permite hacer cosas interesantes, y es sencilla de utilizar.

La sintaxis es la siguiente:

for variable in (lista) do comando

Donde variable es una letra precedida de un % en línea de comando o %% en un archivo bat; lista es cualquier expresión que genere una colección, como (*.txt) o (uno.txt dos.jpeg) y comando es el comando a ejecutar para cada elemento de la colección.

Por ejemplo, para redimensionar todas las fotografías de un directorio usando imagemagick, podríamos utilizar el siguiente comando:

for %a in (*.jpg) do convert %a -resize 50% mini_%a

Si queremos que el comando se ejecute recursivamente para todos los archivos de la carpeta actual y los de sus subdirectorios podemos utilizar el flag /r. Por ejemplo, para copiar todos los archivos del directorio actual y todos sus subdirectorios a otro directorio, podríamos escribir lo siguiente:

for /r %a in (*.*) do xcopy %a c:\directorio\%a

Por último, para extraer sólo el nombre del archivo, descartando la extensión, podemos utilizar el modificador ~n. Por ejemplo, para convertir a PDF todos los html de una carpeta usando wkhtmltopdf podríamos utilizar el siguiente comando:

for /r %a in (*.html) do wkhtmltopdf %a %~na.pdf

2 pensamientos en “Cómo iterar sobre archivos en la consola de Windows”

  1. Y cosas más avanzadas dentro de un cmd:
    for /f “usebackq” %%v in (`wget -qO – http://dev.mysql.com/downloads/tools/workbench/ ^| grep -Poi “[\d\.]+-win32-noinstall\.zip” ^| grep -Poi “^[\d\.]+” ^| uniq`) do (
    rem wget -N http://dev.mysql.com/downloads/gpg.php?file=mysql-workbench-community-%%v-win32-noinstall.zip
    wget -N http://dev.mysql.com/get/Downloads/MySQLGUITools/mysql-workbench-community-%%v-win32-noinstall.zip
    if not exist “MySQL Workbench %%v CE (win32)”\. (
    unzip -n mysql-workbench-community-%%v-win32-noinstall.zip
    junction -d “MySQL Workbench”
    junction “MySQL Workbench” “MySQL Workbench %%v CE (win32)”
    )
    )

    Saludos

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.