Cómo utilizar el archivo por lotes For Loop en Windows

Un archivo por lotes es un simple archivo de texto que contiene una serie de comandos para ser ejecutados secuencialmente por el Símbolo del sistema en Windows. Los archivos por lotes pueden utilizarse para automatizar tareas repetitivas, ejecutar programas o realizar operaciones con archivos y carpetas.

Una característica importante de los archivos por lotes es la posibilidad de crear bucles, que consiste en repetir determinados comandos para cada elemento de un conjunto de datos. Mediante el uso de bucles, puede ahorrar tiempo y esfuerzo en la escritura y ejecución de archivos por lotes.

En este artículo, explicaremos cómo utilizar archivos de bucle for por lotes en Windows, incluyendo la sintaxis, ejemplos y consejos útiles. También trataremos algunas variaciones del bucle for, como for /f, for /r y for /d, que pueden utilizarse para procesar archivos de texto, subcarpetas o directorios. Después de leer este artículo, podrá crear archivos por lotes más eficientes y flexibles utilizando bucles for.

coding

¿Qué es el Batch File For Loop?

Un archivo de bucle for batch es una estructura de control que permite ejecutar un comando específico para cada elemento de un conjunto de datos. El conjunto de datos puede ser una lista de valores, un rango de números o el resultado de otro comando.

Los comandos ejecutados por el bucle for se denominan bloques de comandos, y pueden constar de una o varias líneas. En cada iteración del bucle, el valor actual del elemento se almacenará en una variable, que podrá utilizarse en el bloque de comandos.

La sintaxis básica de un archivo por lotes de bucle for es la siguiente:

FOR %%parameter IN (set) DO command

Dónde:

  • El %%parameter es una variable que almacena el valor actual del elemento. Esta variable debe ir precedida de dos signos de porcentaje (%%) si se utiliza en un archivo por lotes, o de un signo de porcentaje (%) si se utiliza directamente en el símbolo del sistema.
  • (Un conjunto es una colección de datos a procesar por un bucle. Este conjunto puede ser una lista de valores separados por espacios, comas o punto y coma, o un rango de números especificados con el formato  (inicio,paso,fin). Este conjunto también puede ser el resultado de otro comando encerrado entre comillas simples (‘), como  ‘dir /b’  o  ‘type file.txt.
  • es el comando que se ejecutará para cada elemento del conjunto. Este comando puede ser un comando interno o externo, un archivo por lotes o una lista de comandos. La variable %%parameter% puede utilizarse en este comando para referirse al valor actual del elemento. Si el comando consta de más de una línea, debe ir rodeado de paréntesis (( y )).

Ejemplo:

FOR %%A IN (1 2 3) DO ECHO %%A

El comando anterior mostrará los números 1, 2 y 3 secuencialmente en la pantalla.

FOR %%B IN (1,2,10) DO ECHO %%B

El comando anterior mostrará los números 1, 3, 5, 7 y 9 secuencialmente en la pantalla. Esto se debe a que el rango de números  (1,2,10)  significa comenzar en 1, aumentar en 2 cada paso, hasta un máximo de 10.

FOR %%C IN ('dir /b *.txt') DO TYPE %%C

El comando anterior mostrará el contenido de todos los archivos de texto presentes en el directorio actual.

¿Cómo utilizar el bucle For de archivos por lotes para procesar archivos y carpetas?

Uno de los usos habituales de los archivos por lotes para bucles es procesar archivos y carpetas en bloque. Por ejemplo, puede querer renombrar, borrar o mover un número de ficheros o carpetas siguiendo un patrón específico. Para ello, puede utilizar algunas de las opciones adicionales disponibles para los bucles for, como:

  • /F para procesar archivos de texto o resultados de otros comandos.
  • /R para procesar subcarpetas de forma recursiva.
  • /D para procesar sólo directorios.

A continuación se muestra la sintaxis del archivo por lotes del bucle for con estas opciones adicionales:

FOR /F ["options"] %%parameter IN (set) DO command

Dónde:

  • [«opciones»] son opciones adicionales que se pueden utilizar para controlar cómo el bucle for procesa archivos de texto o resultados de comandos. Algunas opciones de uso común son:
FOR /R [[drive:]path] %%parameter IN (set) DO command

Dónde:

  • [es el directorio inicial que procesará el bucle. Si no se especifica, se utilizará el directorio actual.
  • (conjunto) es el conjunto de archivos que debe procesar el bucle. Este conjunto debe coincidir con un patrón de archivos (file globbing), como  *.txt  o  ?.bat. Si el conjunto está vacío, se procesarán todos los archivos.
FOR /D %%parameter IN (set) DO command

Dónde:

  • (set) es el conjunto de directorios a procesar por el bucle. Este conjunto debe ser un patrón de coincidencia de archivos (file globbing), como  * o ?. Si el conjunto está vacío, se procesarán todos los directorios.

Ejemplo:

FOR /F "skip=1 delims=," %%A IN (data.csv) DO ECHO %%A

El comando anterior omitirá la primera línea del archivo data.csv, que normalmente contiene los encabezados de las columnas, y mostrará el valor de la primera columna de cada línea posterior, separados por comas.

FOR /F "tokens=1,2* usebackq" %%A IN ("file name.txt") DO ECHO %%A %%B %%C

El comando anterior procesará un archivo de texto cuyo nombre contenga espacios, y mostrará los valores de la primera, segunda y restantes columnas de cada línea, separados por espacios o tabuladores.

FOR /R C:\Users\ %%D IN (*.jpg) DO COPY %%D D:\Backup\

The above command will search for all files with the .jpg extension in the C:\Users\ directory and its subdirectories, and copy them to the D:\Backup directory.

FOR /D %%E IN (*) DO RMDIR /S /Q %%E

El comando anterior borrará todos los directorios y su contenido en el directorio actual.

¿Cómo utilizar Batch File For Loop para acceder a la información de archivos y carpetas?

Además de procesar archivos y carpetas con el archivo por lotes para bucle, también puede acceder a información sobre ellos, como el nombre, la extensión, el tamaño, la fecha de modificación, los atributos y la ruta.

Para ello, puede utilizar modificadores de ruta en las variables de bucle. Un modificador de ruta es un carácter especial que se puede añadir después del signo de porcentaje (%) en una variable de bucle para cambiar el valor de esa variable.

Estas son algunas de las modificaciones de ruta más utilizadas:

  • %~fparameter para mostrar la ruta completa de un archivo o carpeta.
  • %~nparameter` para mostrar los nombres de archivos o carpetas sin extensiones.
  • %~xparameter para mostrar las extensiones de archivos o carpetas.
  • %~sparameter para mostrar la ruta corta de un archivo o carpeta, lo que resulta útil si la ruta contiene espacios.
  • %~zparameter para mostrar el tamaño del archivo o carpeta en bytes.
  • %~tparameter para mostrar la fecha y hora de modificación del archivo o carpeta.
  • %~aparameter para mostrar atributos de archivos o carpetas, como R (sólo lectura), H (oculto), S (sistema), etc.

Ejemplo:

FOR %%F IN (*.txt) DO ECHO %%F %%~nF %%~xF %%~sF %%~zF %%~tF %%~aF

El comando anterior mostrará información sobre todos los archivos de texto del directorio actual, como el nombre, la extensión, la ruta corta, el tamaño, la fecha de modificación y los atributos.

¿Cómo utilizar el archivo por lotes For Loop para crear rutas relativas?

Uno de los retos a los que puede enfrentarse al utilizar un archivo por lotes para bucle es cómo crear una ruta relativa del archivo o carpeta procesado por el bucle. Una ruta relativa es una ruta que no contiene el nombre de la unidad o directorio inicial, sino sólo una parte de una ruta diferente del directorio actual.

Por ejemplo, si el directorio actual es C:\Users\Alice\Documents, entonces la ruta relativa del archivo C:\Users\Alice\Pictures\image.jpg es …\Pictures\image.jpg.Por ejemplo, si el directorio actual es C:\Users\Alice\Documents, entonces la ruta relativa del archivo C:\Users\Alice\Pictures\image.jpg es …\Pictures\image.jpg.

La creación de rutas relativas puede ser útil si desea mover, copiar o renombrar archivos o carpetas a una ubicación diferente, pero manteniendo la estructura de directorios original. Por ejemplo, puede que desee mover todos los archivos de texto del directorio C:\Users\Alice\Documents y sus subdirectorios al directorio D:\Backup, pero manteniendo los subdirectorios.

Para crear rutas relativas con archivos batch for loop, puede utilizar alguna de las siguientes técnicas:

  • Utiliza la variable de entorno «CD» para obtener el directorio actual, y lo elimina de la ruta completa del archivo o carpeta mediante el comando «SET».
  • Utilice la opción /V:ON para activar la expansión retardada de variables, y utilice un signo de exclamación (!) como delimitador de variables en lugar de un signo de porcentaje (%). Esto es útil si desea cambiar el valor de una variable en un bucle.
  • Utiliza los comandos «PUSHD» y «POPD» para cambiar el directorio actual mientras se está en el bucle, y utiliza un punto (.) para referirse al directorio actual.

Ejemplo:

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /R C:\Users\Alice\Documents %%G IN (*.txt) DO (
  SET "source=%%G"
  SET "destination=!source:%CD%=!"
  ECHO !destination!
)
ENDLOCAL

El comando anterior buscará todos los archivos de texto en el directorio C:\Users\Alice\Documents y sus subdirectorios, y mostrará sus rutas relativas desde el directorio actual. Por ejemplo, si el directorio actual es C:\Users\Alice\Documents, entonces la ruta relativa del archivo C:\Users\Alice\Documents\Folder1\File1.txt es Folder1\File1.txt.

@ECHO OFF
FOR /R C:\Users\Alice\Documents %%H IN (*.txt) DO (
  PUSHD "%%~dpH"
  SET "source=%%H"
  SET "destination=%CD%\%%~nxH"
  ECHO %destination%
  POPD
)

El comando anterior buscará todos los archivos de texto en el directorio C:\Usuarios\Alice\Documentos y sus subdirectorios, y mostrará su ruta completa utilizando el directorio actual como prefijo. Por ejemplo, si el directorio actual es D:\Backup, entonces la ruta completa del archivo C:\Users\Alice\Documents\Folder1\File1.txt es D:\Backup\Folder1\File1.txt.

Conclusión

El bucle for de un fichero por lotes es una función muy útil para crear ficheros por lotes más eficaces y flexibles. Mediante un bucle for, puede repetir un comando específico para cada elemento de un conjunto de datos, como una lista de valores, un rango de números o el resultado de otro comando.

También puede utilizar algunas de las opciones adicionales disponibles para los bucles for, como /F, /R y /D, para procesar archivos de texto, subcarpetas o directorios. Además, también puede acceder a información sobre los archivos y carpetas procesados por el bucle, como el nombre, la extensión, el tamaño, la fecha de modificación, los atributos y la ruta, mediante la modificación de la ruta en las variables del bucle.

Por último, también puede crear una ruta relativa de los archivos y carpetas procesados por el bucle, utilizando varias técnicas como eliminar el directorio actual de la ruta completa, activar la expansión retardada de variables o cambiar el directorio actual mientras se está en el bucle.

Esperamos que este artículo sea útil para aquellos de ustedes que quieran aprender más acerca de los archivos por lotes para bucles en Windows. Si tiene alguna pregunta o sugerencia, por favor deje un comentario a continuación. Gracias por su lectura.

ARTÍCULOS RELACIONADOS

Artículos más recientes