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

Comentarios
  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

    Responder

Deja un comentario