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