Guías sobre temas de bases de datos y programación
bucles FOR
Ejecuta el comando para cada uno de los elementos especificados en la lista:
Sintaxis
desde línea de comandos:
FOR %NombreVariable IN (lista) DO comando
dentro de archivos BAT:
FOR %%NombreVariable IN (lista) DO comando
Ojo: la variable diferencia entre mayúscula y minúscula
MS-DOS
a ejecutar con cada elemento de la lista.Ejemplo 1
for %%x in (uno dos tres cuatro) do @echo %%x
Ahora podemos ejecutar el archivo por lote:
C:\bat>repite.bat
uno
dos
tres
cuatro
NOTA: Si las extensiones de comandos están habilitadas, podemos suprimir las comillas de una variable con el símbolo
~
:for %%X in (%*) do echo %%~X
Ejemplo 1
Cuando aparezca un *
en la lista, lo interpretará como un comodín, y antes de aplicar el comando se creará una lista de archivos que cumpla con la expresión regular. En la elaboración de la lista sólo tedrá en cuenta archivos, NO directorios.
Visualizamos los archivos del directorio actual
FOR %f IN (*) DO @echo %f
Salida:
C:\Users\home\Desktop>FOR %f IN (*) DO @echo %f
gitflow.bat
nombres.txt
imagen.jpg
Visualizar ciertos tipos de archivos:
for %f in (*.png, *.jpg, *.gif) do echo %f
Ejemplo 2
En este ejemplo de archivo.bat nos lista todos los archivos ejecutables (.exe, .msi, .bat) del directorio pasado desde la línea de comandos. (Si no pasamos argumento, muestra los del directorio raíz)
@echo off
FOR %%X IN (%1\*.exe %1\*.com %1\*.bat) DO echo %%X
Cuando las extensiones de comandos están habilitadas (por defecto lo están), el comando FOR admite una serie de parámetros que amplían su funcionalidad.
1) Con el parámetro /R
ejecuta el comando recursivamente
C:\>for /R %x in (*) do @echo %x
C:\editpad.zip
C:\LANGUAGE.txt
...
C:\Windows\bfsvc.exe
C:\Windows\bootstat.dat
C:\Windows\DtcInstall.log
...
C:\Windows\system32\mscoree.dll
C:\Windows\system32\msorcl32.dll
C:\Windows\system32\aaaamon.dll
...
2) Con el parámetro /D
recorre los directorios, en lugar de archivos.
C:\>for /D %x in (*) do @echo %x
Program Files
Program Files (x86)
Windows
...
3) Con el parámetro /L
podemos crear el típico contador:
Sintaxis
FOR /L %NombreVariable IN (inicio salto final) DO comando
podemos separar ‘inicio’, ‘salto’ y ‘final’ por comas (,
) o punto y coma (;
).
En el siguiente ejemplo de archivo.bat crea archivos .txt vacíos, cuyo nombre y cantidad la especificamos desde la línea de comandos:
@ECHO OFF
FOR /L %%A IN (1 1 %1) DO ECHO. > %2%%A.txt
Ejemplo de uso:
C:\pruebas>crea.bat 5 archivo
C:\pruebas>DIR CH* /B
archivo1.txt
archivo2.txt
archivo3.txt
archivo4.txt
archivo5.txt
4) Con el parámetro /F
podemos recorrer las siguientes cosas:
Ejemplo en archivo:
C:\>type fich.txt
El corazón y el cerebro, las dos grandes vísceras
que se llevan la primacía de los sentimientos y de
la razón, son las que presiden el arranque de las
coplas de Jorge Manrique a la muerte de su padre.
C:\>FOR /F %x IN (fich.txt) DO @ECHO %x
El
que
la
coplas
El comando for
va recorriendo todas las líneas, y cada línea se ha divido en “tokens” (por defecto: token=palabra
). La variable del for
almacena el primer token de cada línea.
tokens
Podemos seleccionar varios tokens mediante la cláusula tokens=
, Los distintos tokens se irán guardando en nombres de variable alfabéticamente consecutivas a partir de la variable utilizada en el for.
En el siguiente nos quedamos con los tokens (palabras) 1, 3 y 5 de cada línea:
C:\>FOR /F "tokens=1,3,5" %i IN (fich.txt) DO @ECHO %i - %j - %k
El - y - cerebro,
que - llevan - primacía
la - son - que
coplas - Jorge - a
Podemos escoger randos, en el siguiente ejemplo nos quedamos con las primeras 3 palabras y la 5:
C:\>FOR /F "tokens=1-3,5" %a IN (fich.txt) DO @ECHO %a %b %c - %d
El corazón y - cerebro,
que se llevan - primacía
la razón, son - que
coplas de Jorge - a
Y si deseamos la línea completa a partir de la 7° palabra:
C:\>FOR /F "tokens=7*" %A IN (fich.txt) DO @ECHO %A %B
dos grandes vísceras
los sentimientos y de
el arranque de las
muerte de su padre.
Y si queremos toda la línea, seleccionaremos todos los tokens de cada línea:
C:\>FOR /F "tokens=*" %m IN (fich.txt) DO @ECHO [ %m ]
[ El corazón y el cerebro, las dos grandes vísceras ]
[ que se llevan la primacía de los sentimientos y de ]
[ la razón, son las que presiden el arranque de las ]
[ coplas de Jorge Manrique a la muerte de su padre. ]
Delimitadores
En los ejemplos anteriores los “tokens” coincidían con las palabras, para separarlos se han utilizado el espacio en blanco y la tabulación. Podemos modificar los delimitadores con la cláusula delims=
.
En el siguiente ejemplo anulamos los delimitadores y obtenemos lo mismo de antes: