Bucles FOR con batch

Los bucles for en Batch son una herramienta poderosa para automatizar tareas repetitivas en sistemas Windows. A continuación, vamos a ver cómo funcionan, sus diferentes variantes y algunos ejemplos prácticos para que puedas utilizarlos eficazmente en tus scripts.

Sintaxis Básica del Bucle for

El comando for en Batch permite iterar sobre una serie de elementos, como archivos, cadenas de texto o resultados de comandos. La sintaxis general es la siguiente:

FOR %%variable IN (conjunto_de_elementos) DO comando

Notas Importantes:

  • %%variable: En scripts Batch, las variables dentro de los bucles for se representan con doble porcentaje (%%). Si ejecutas el comando directamente en la línea de comandos (CMD), usarías un solo %.

  • conjunto_de_elementos: Puede ser una lista de archivos, números, palabras, etc.

  • comando: La acción que deseas realizar en cada iteración.

Tipos de Bucles for en Batch

Bucle for Básico (Iterar sobre archivos o elementos)

Este tipo de bucle es útil para procesar una lista de archivos o elementos especificados.

Ejemplo: Iterar sobre archivos .txt en un directorio

@echo off
FOR %%f IN (*.txt) DO (
    echo Procesando el archivo %%f
    REM Ahora podemos agregar comandos para manipular %%f, por ejemplo:
    type %%f
)

Explicación:

  • %%f: Variable que representa cada archivo .txt encontrado en el directorio actual.

  • *.txt: Patrón que coincide con todos los archivos con extensión .txt.

  • echo Procesando el archivo %%f: Muestra un mensaje por cada archivo procesado.

Bucle for /f (Iterar sobre líneas de un archivo o salida de un comando)

La opción /f permite procesar el contenido de archivos, cadenas de texto o la salida de comandos.

Sintaxis:

FOR /f ["opciones"] %%variable IN (fuente) DO comando

Ejemplo: Leer y mostrar cada línea de un archivo de texto

@echo off
FOR /f "tokens=*" %%l IN (archivo.txt) DO (
    echo Línea leída: %%l
)

Explicación:

  • "tokens=*": Indica que se debe leer la línea completa sin dividirla en tokens.

  • %%l: Variable que representa cada línea leída del archivo archivo.txt.

  • echo Línea leída: %%l: Muestra cada línea del archivo.

Ejemplo: Iterar sobre la salida de un comando

@echo off
FOR /f "tokens=1" %%i IN ('dir /b *.txt') DO (
    echo Archivo encontrado: %%i
)

Explicación:

  • 'dir /b *.txt': Comando cuyo resultado será iterado. dir /b lista los archivos en formato sencillo.

  • %%i: Variable que representa cada archivo listado por el comando dir.

  • echo Archivo encontrado: %%i: Muestra cada archivo encontrado.

Bucle for /l (Iterar sobre un rango de números)

La opción /l permite iterar sobre un rango de números especificando un inicio, un incremento y un fin.

Sintaxis:

FOR /l %%variable IN (inicio, incremento, fin) DO comando

Ejemplo: Contar del 1 al 5

@echo off
FOR /l %%i IN (1,1,5) DO (
    echo Contador: %%i
)

Explicación:

  • (1,1,5): Inicia en 1, incrementa de 1 en 1, hasta llegar a 5.

  • %%i: Variable que representa el valor actual del contador.

  • echo Contador: %%i: Muestra el valor del contador en cada iteración.

Bucle for /d (Iterar sobre directorios)

La opción /d permite iterar exclusivamente sobre directorios en lugar de archivos.

Ejemplo: Listar todos los subdirectorios en el directorio actual

@echo off
FOR /d %%d IN (*) DO (
    echo Directorio encontrado: %%d
)

Explicación:

  • %%d: Variable que representa cada subdirectorio encontrado.

  • (*): Patrón que coincide con todos los directorios en el directorio actual.

  • echo Directorio encontrado: %%d: Muestra cada directorio encontrado.

Modificadores de Variables

Dentro de los bucles for, puedes usar modificadores para obtener partes específicas de las variables. Algunos de los más comunes son:

  • %%~nF: Nombre del archivo sin la extensión.

  • %%~xF: Extensión del archivo.

  • %%~dpF: Ruta completa del archivo.

  • %%~fF: Ruta completa y nombre del archivo.

Ejemplo: Renombrar archivos añadiendo un prefijo

@echo off
SET prefix=Nuevo_

FOR %%f IN (*.txt) DO (
    REN "%%f" "%prefix%%%~nxf"
    echo Archivo renombrado a %prefix%%%~nxf
)

Explicación:

  • %prefix%: Variable que contiene el prefijo a añadir.

  • %%~nxf: Nombre y extensión del archivo actual.

  • REN "%%f" "%prefix%%%~nxf": Renombra cada archivo añadiendo el prefijo definido.

Usos prácticos de bucle FOR

Ejemplo 1: Crear archivos con un rango de números en el nombre

Si deseas crear archivos llamados archivo1.txt, archivo2.txt, ..., archivo10.txt, puedes usar el bucle FOR /L para iterar sobre un rango numérico.

@echo off
FOR /L %%i IN (1,1,10) DO (
    echo Este es el contenido del archivo %%i > archivo%%i.txt
    echo Archivo creado: archivo%%i.txt
)

Explicación:

  • /L: Itera sobre un rango de números.

  • (1,1,10): Empieza en 1, incrementa de 1 en 1, hasta llegar a 10.

  • echo Este es el contenido del archivo %%i > archivo%%i.txt: Crea un archivo llamado archivo%%i.txt con contenido específico.

  • archivo%%i.txt: Los nombres de los archivos tendrán números iterativos (archivo1.txt, archivo2.txt, ...).


Ejemplo 2: Crear archivos con nombres personalizados

Si necesitas usar una lista de nombres específicos, puedes usar un bucle FOR con un conjunto de valores predefinidos.

@echo off
FOR %%i IN (rojo verde azul amarillo) DO (
    echo Este es el archivo %%i > %%i.txt
    echo Archivo creado: %%i.txt
)

Explicación:

  • (rojo verde azul amarillo): Lista de valores que serán iterados.

  • %%i: Representa cada valor de la lista.

  • echo Este es el archivo %%i > %%i.txt: Crea un archivo con el nombre basado en cada valor de la lista (rojo.txt, verde.txt, etc.).


Ejemplo 3: Crear archivos con prefijo y números

Si deseas combinar un prefijo con números, puedes definir un prefijo como variable.

@echo off
SET prefix=Reporte_
FOR /L %%i IN (1,1,5) DO (
    echo Este es el contenido del archivo %prefix%%%i > %prefix%%%i.txt
    echo Archivo creado: %prefix%%%i.txt
)

Explicación:

  • SET prefix=Reporte_: Define un prefijo para los nombres de los archivos.

  • %prefix%%%i.txt: Combina el prefijo con el número iterativo (Reporte_1.txt, Reporte_2.txt, etc.).


Ejemplo 4: Crear archivos en diferentes carpetas

Puedes usar el bucle FOR para crear archivos dentro de subdirectorios.

@echo off
FOR /D %%i IN (*) DO (
    echo Archivo en la carpeta %%i > %%i\archivo.txt
    echo Archivo creado en la carpeta %%i: %%i\archivo.txt
)

Explicación:

  • /D: Itera sobre directorios en lugar de archivos.

  • %%i\archivo.txt: Crea un archivo llamado archivo.txt dentro de cada subdirectorio encontrado.


Ejemplo 5: Crear archivos con nombres basados en la fecha actual

Si quieres nombres únicos basados en la fecha y hora, puedes usar variables de entorno.

@echo off
FOR /L %%i IN (1,1,3) DO (
    SETLOCAL ENABLEDELAYEDEXPANSION
    SET fecha=%date:~0,10%
    SET hora=%time:~0,2%-%time:~3,2%-%time:~6,2%
    echo Archivo creado el !fecha! a las !hora! > archivo_%%i_!fecha!-!hora!.txt
    echo Creado: archivo_%%i_!fecha!-!hora!.txt
    ENDLOCAL
)

Explicación:

  • %date% y %time%: Variables de entorno que contienen la fecha y hora actuales.

  • !fecha! y !hora!: Variables con expansión retrasada (SETLOCAL ENABLEDELAYEDEXPANSION).

  • archivo_%%i_!fecha!-!hora!.txt: Crea archivos con nombres únicos como archivo_1_2024-11-15-10-30.txt.

Última actualización