for - Comando de bucle
Al crear archivos por lotes, es habitual encontrarse con situaciones en las que se desea “ejecutar la misma operación sobre varios archivos” o “repetir un proceso un número determinado de veces.”
El comando FOR es el que hace posible este tipo de procesamiento en bucle.
Este artículo explica el comando FOR desde los conceptos básicos hasta cada opción, con ejemplos de código prácticos.
Sintaxis básica del comando FOR
La sintaxis básica del comando FOR es la siguiente.
FOR %%variable IN (conjunto) DO comando
| Elemento | Descripción |
|---|---|
%%variable | Variable que recibe cada valor en el bucle (una letra, a–z o A–Z) |
(conjunto) | Valores, comodines o conjunto de archivos a iterar |
comando | Comando a ejecutar en cada iteración |
Al ejecutar directamente en el símbolo del sistema, usa %variable (un signo de porcentaje). Dentro de un archivo por lotes, usa %%variable (dos signos de porcentaje).
Ejemplo básico
Un ejemplo sencillo que procesa varios valores en secuencia.
@echo off
setlocal
FOR %%i IN (manzana naranja uva) DO (
echo Se seleccionó %%i
)
endlocal
Cada valor del conjunto se almacena en %%i de uno en uno, y se ejecuta el comando tras DO.
Iterar sobre archivos
Usando comodines, se puede iterar sobre archivos que coincidan con una condición.
@echo off
setlocal
FOR %%f IN (*.txt) DO (
echo Archivo: %%f
)
endlocal

中小企業経営者のためのRPA入門 RPA導入を成功させる方法

60分でわかる! AIエージェント 超 入門

コマンドラインの黒い画面が怖いんです。

知識・才能ゼロでもらく~に月10万円稼ぐ! よくわかるAI副業超入門
Se procesarán todos los archivos .txt del directorio actual.
Opción /L: Bucle sobre un rango numérico
La opción /L permite ejecutar un bucle incrementando un número.
FOR /L %%variable IN (inicio, paso, fin) DO comando
| Parámetro | Descripción |
|---|---|
| inicio | Valor inicial del bucle |
| paso | Valor que se añade en cada iteración |
| fin | Valor final del bucle |
Contar del 1 al 5
@echo off
setlocal
FOR /L %%n IN (1, 1, 5) DO (
echo Cuenta: %%n
)
endlocal
Cuenta regresiva de 2 en 2
Un valor de paso negativo produce una cuenta regresiva.
@echo off
setlocal
FOR /L %%n IN (10, -2, 0) DO (
echo %%n
)
endlocal
Opción /D: Iterar sobre directorios
La opción /D itera únicamente sobre directorios, no sobre archivos.
FOR /D %%variable IN (patrón) DO comando
Ejemplo
@echo off
setlocal
echo Carpetas en el directorio actual:
FOR /D %%d IN (*) DO (
echo [DIR] %%d
)
endlocal
Opción /R: Bucle recursivo incluyendo subdirectorios
La opción /R itera a través de todos los subdirectorios bajo una raíz dada.
FOR /R [ruta raíz] %%variable IN (patrón) DO comando
Si se omite la ruta raíz, se usa el directorio actual.
Ejemplo: Buscar todos los archivos .txt
@echo off
setlocal
echo Buscando todos los archivos .txt...
FOR /R %%f IN (*.txt) DO (
echo Encontrado: %%f
)
endlocal
Usar la opción /R en un directorio con muchos archivos puede tardar bastante tiempo.
Opción /F: Leer contenido de archivos o salida de comandos
La opción /F es la más potente. Lee cada línea de un archivo de texto o procesa la salida de un comando.
FOR /F ["opciones"] %%variable IN (entrada) DO comando
Procesar cada línea de un archivo de texto
@echo off
setlocal
echo Mostrando contenido del archivo línea a línea:
FOR /F %%linea IN (datos.txt) DO (
echo %%linea
)
endlocal
Sub-opciones disponibles
| Opción | Descripción |
|---|---|
delims=chars | Caracteres delimitadores (por defecto: espacio y tabulador) |
tokens=n | Qué token(s) extraer |
skip=n | Número de líneas a omitir al inicio |
eol=char | Trata las líneas que comienzan con este carácter como comentarios |
usebackq | Trata las comillas inversas como comandos, las comillas simples como cadenas y las dobles para rutas con espacios |
Ejemplo: Procesar un archivo CSV
@echo off
setlocal
echo Procesando CSV de nombre,edad,ciudad:
FOR /F "tokens=1,2,3 delims=," %%a IN (usuarios.csv) DO (
echo Nombre: %%a / Edad: %%b / Ciudad: %%c
)
endlocal
Con usuarios.csv conteniendo:
Alicia,25,Madrid
Roberto,30,Barcelona
Carlos,28,Sevilla
Procesar la salida de un comando
Encierra un comando entre comillas invertidas para iterar sobre su salida.
@echo off
setlocal
echo Contando archivos en el directorio actual:
set count=0
FOR /F %%f IN ('dir /b /a-d') DO (
set /a count+=1
)
echo Número de archivos: %count%
endlocal
Modificadores de variables
Las variables de FOR admiten modificadores para extraer información de archivos.
| Modificador | Descripción |
|---|---|
%%~f | Ruta completa |
%%~d | Solo la letra de unidad |
%%~p | Ruta sin la unidad |
%%~n | Nombre de archivo sin extensión |
%%~x | Solo la extensión |
%%~z | Tamaño del archivo en bytes |
%%~t | Fecha y hora del archivo |
Ejemplo
@echo off
setlocal
FOR %%f IN (*.txt) DO (
echo Archivo: %%f
echo Ruta completa: %%~ff
echo Nombre: %%~nf
echo Extensión: %%~xf
echo Tamaño: %%~zf bytes
echo.
)
endlocal
Ejemplos prácticos
Renombrar archivos en masa
@echo off
setlocal enabledelayedexpansion
set prefix=copia_
set count=1
FOR %%f IN (*.txt) DO (
set newname=%prefix%!count!%%~xf
echo Renombrando %%f a !newname!
ren "%%f" "!newname!"
set /a count+=1
)
echo Listo.
endlocal
Eliminar archivos de registro antiguos
@echo off
setlocal
echo Eliminando archivos de registro con más de 7 días...
FOR /F "delims=" %%f IN ('forfiles /p "C:\logs" /s /m *.log /d -7 /c "cmd /c echo @path" 2^>nul') DO (
echo Eliminando: %%f
del "%%f"
)
echo Listo.
endlocal
Resumen
El comando FOR es una herramienta poderosa para los bucles en archivos por lotes.
Puntos clave:
- Sintaxis básica:
FOR %%variable IN (conjunto) DO comando - Opción
/L: Bucle sobre un rango numérico (inicio, paso, fin) - Opción
/D: Iterar solo sobre directorios - Opción
/R: Bucle recursivo incluyendo subdirectorios - Opción
/F: Leer contenido de archivos o procesar la salida de comandos