1.-Otras formas de separar los elementos del conjunto en parametro /L:
FOR /L %variable IN (inicio, paso, fin) comando DO
Los elementos del conjunto FOR, los podiamos separar de la siguiente manera:
for /l %%_ in (1 1 10) do (Acciones)
for /l %%_ in (1,1,10) do (Acciones)
He experimentado con algunas otras:
for /l %%_ in (1;1;10) do (echo %%_)
for /l %%_ in ([1;1;10]) do (echo %%_)
En este hubo un ligero cambio, no inició desde 1, sino desde 0, luego explicaré por qué.
for /l %%_ in ([1,1,10]) do (echo %%_)
Lo mismo, inicia desde 0.
Por qué inicia desde 0 y no de 1?
Aqui:
for /l %%_ in ([1,1,[10]]) do (
echo %%_
)
El primer 1 no es reconocido como un elemento valido y lo inicia desde 0, da lo mismo que hicieramos:
for /l %%_ in ("1" 1 20) do (echo %%_)
Igual lo iniciaría en 0.
Esto puede tener una aplicación práctica, ya sea para confundir un código:
for /l %%_ in (
{[200]}
2
100
) do (
echo %%_
)
Se forza a que el primer elemento empieze por 0.
2.-Especificar numeros en hexadecimal como elementos del conjunto, para el parametro /L
FOR /L %variable IN (inicio, paso, fin) comando DO
for /l %%_ in (0x0001 0x0001 0x0064) do (echo %%_)
Muestra una lista desde 1 hasta 100.
Tambien se puede especificar valores negativos:
for /l %%_ in (-0x0004 0x0001 0X0064) do (echo %%_)
Combinar decimal con hexadecimal:
for /l %%_ in (0x0001 0x0001 100) do (echo %%_)
Más ejemplos:
for /l %%_ in (0x64 0x01 0xC8) do (
pause
echo %%_
)
for /l %%_ in (0x01 0x01 0x64) do (
echo %%_
)
3.-Nueva forma de poner comentarios, sobre el conjunto del comando FOR, parametro /L
FOR /L %variable IN (inicio, paso, fin) comando DO
for /l %%_ in (1Uno 1Incremento_de_uno 100Hasta_100) do (
echo %%_
)
Como ven, se puede poner texto despues del elemento "inicio" "paso" y "fin".
Otra manera, a mi parecer mas comoda:
for /l %%_ in (2"Dos demas comentarios" 2"Dos dems comentarios" 100"Cien dems comentarios") do (
echo %%_
)
Otros ejemplos:
for /l %%_ in (
1-"Empezamos en uno"
1-"Con un incremento de una unidad"
100-"Terminamos en 100"
) do (
echo %%_
)
Incluso pueden poner caracteres especiales dentro del comentario, son completamente ignorados.
Combinadas todas las técnicas:
@echo off
for /l %%_ in (
{[-0x001E]}-"Especifico -30 en hexadecimal, pero es ignorado y empieza en 0, por los {[]}"
;2-"Especifico 2 en decimal, incrementa la unidad en 2"
;0x0064-"100 en hexadecimal, el loop termina en 100"
) do (
echo %%_
ping -n 1 loopback > nul 2>&1
)
Salida:
0
2
4
6
8
10
Nota: Estas son cosas que he descubierto solo, si algunas de ellas ya estaban documentadas, haganmelo saber.
Leo Gutiérrez Ramirez.
Saludos.
Algunas cosas de esas me habian pasado, pero no le prestaba atencion, igual muchisimas gracias por tu aporte. ;P
Saludos.
PD: te respondo aqui o en todos lados...xD xD xD ;D
Cita de: :: SmartGenius :: en 11 Mayo 2009, 05:31 AM
Algunas cosas de esas me habian pasado, pero no le prestaba atencion, igual muchisimas gracias por tu aporte. ;P
Saludos.
PD: te respondo aqui o en todos lados...xD xD xD ;D
Cosas como cuales?
Interesante lo de los comentarios, no había visto eso en ninguna parte.
Yo había enviado a code-makers un artículo del comando for, que al final pedí que lo cancelaran (cuando encontré el error del eol), y en la parte de for /l tenía esto:
La sintaxis es:
for /L {%% | %}variable in (númeroInicial,númeroPaso,númeroFinal) do comando
for /L utiliza un grupo interno de valores iguales a 0.
Por ejemplo:
for /L %%a in () genera la secuencia (0 0 0 0 0 ... infinito) porque para for /L eso es : (0,0,0).
for /L %%a in (-1) genera la secuencia (-1 -1 -1 -1 ... infinito) porque para for /L eso es: (-1,0,0).
for /L %%a in (0,1) genera la secuencia (0) porque para for /L eso es: (0,1,0).
En for /L lo que va dentro de in puede separarse por espacios y/o comas.
Los números pueden escribirse en notación decimal, octal y hexadecimal.
Ahora que dices que pueden usarse ; la lógica dice que puede usarse cualquier delimitador de cmd, es decir:
espacio
coma
punto y coma
=
for /L %%a in (0=1=10) do echo %%a
En for /l el goto :eof se interpreta como el cierre del batch (el return de c), en cambio en los otros for se interpreta como el continue de c, es decir, se va arriba y se evalúa la condición nuevamente.
Ejemplo:
@echo off
for /f %%a in ("uno dos nueve") do (
if "%%a"=="dos" goto :eof
echo.%%a
)
pause
for /l %%a in (1,2,9) do (
if %%a equ 5 goto :eof
echo.%%a
)
pause