elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Descubrimientos y tecnicas, comando FOR. [Batch]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Descubrimientos y tecnicas, comando FOR. [Batch]  (Leído 3,868 veces)
leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Descubrimientos y tecnicas, comando FOR. [Batch]
« en: 10 Mayo 2009, 22:01 pm »

1.-Otras formas de separar los elementos del conjunto en parametro /L:

Código:
FOR /L %variable IN (inicio, paso, fin) comando DO
Los elementos del conjunto FOR, los podiamos separar de la siguiente manera:
Código:
for /l %%_ in (1 1 10) do (Acciones)
for /l %%_ in (1,1,10) do (Acciones)
He experimentado con algunas otras:
Código
  1. for /l %%_ in (1;1;10) do (echo %%_)
  2. 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é.
Código
  1. for /l %%_ in ([1,1,10]) do (echo %%_)
Lo mismo, inicia desde 0.
Por qué inicia desde 0 y no de 1?
Aqui:
Código
  1. for /l %%_ in ([1,1,[10]]) do (
  2. echo %%_
  3. )
El primer 1 no es reconocido como un elemento valido y lo inicia desde 0, da lo mismo que hicieramos:
Código
  1. 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:
Código
  1. for /l %%_ in (
  2. {[200]}
  3. 2
  4. 100
  5. ) do (
  6. echo %%_
  7. )
Se forza a que el primer elemento empieze por 0.

2.-Especificar numeros en hexadecimal como elementos del conjunto, para el parametro /L
Código:
FOR /L %variable IN (inicio, paso, fin) comando DO
Código
  1. for /l %%_ in (0x0001 0x0001 0x0064) do (echo %%_)
Muestra una lista desde 1 hasta 100.
Tambien se puede especificar valores negativos:
Código
  1. for /l %%_ in (-0x0004 0x0001 0X0064) do (echo %%_)
Combinar decimal con hexadecimal:
Código
  1. for /l %%_ in (0x0001 0x0001 100) do (echo %%_)
Más ejemplos:
Código
  1. for /l %%_ in (0x64 0x01 0xC8) do (
  2. echo %%_
  3. )
Código
  1. for /l %%_ in (0x01 0x01 0x64) do (
  2. echo %%_
  3. )

3.-Nueva forma de poner comentarios, sobre el conjunto del comando FOR, parametro /L
Código:
FOR /L %variable IN (inicio, paso, fin) comando DO
Código
  1. for /l %%_ in (1Uno 1Incremento_de_uno 100Hasta_100) do (
  2. echo %%_
  3. )
Como ven, se puede poner texto despues del elemento "inicio" "paso" y "fin".
Otra manera, a mi parecer mas comoda:
Código
  1. for /l %%_ in (2"Dos demas comentarios" 2"Dos dems comentarios" 100"Cien dems comentarios") do (
  2. echo %%_
  3. )
Otros ejemplos:
Código
  1. for /l %%_ in (
  2. 1-"Empezamos en uno"
  3. 1-"Con un incremento de una unidad"
  4. 100-"Terminamos en 100"
  5. ) do (
  6. echo %%_
  7. )
Incluso pueden poner caracteres especiales dentro del comentario, son completamente ignorados.

Combinadas todas las técnicas:
Código
  1. @echo off
  2. for /l %%_ in (
  3. {[-0x001E]}-"Especifico -30 en hexadecimal, pero es ignorado y empieza en 0, por los {[]}"
  4. ;2-"Especifico 2 en decimal, incrementa la unidad en 2"
  5. ;0x0064-"100 en hexadecimal, el loop termina en 100"
  6. ) do (
  7. echo %%_
  8. ping -n 1 loopback > nul 2>&1
  9. )
Salida:
Código:
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.


En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
SmartGenius

Desconectado Desconectado

Mensajes: 181


:P


Ver Perfil WWW
Re: Descubrimientos y tecnicas, comando FOR. [Batch]
« Respuesta #1 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


En línea


leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Descubrimientos y tecnicas, comando FOR. [Batch]
« Respuesta #2 en: 11 Mayo 2009, 08:15 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?
En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
0x0309

Desconectado Desconectado

Mensajes: 215


Ver Perfil
Re: Descubrimientos y tecnicas, comando FOR. [Batch]
« Respuesta #3 en: 11 Mayo 2009, 17:03 pm »

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:

Código:
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:
Código:
@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
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Los mejores inventos-descubrimientos
Foro Libre
xman6 8 4,527 Último mensaje 3 Mayo 2012, 23:27 pm
por xman6
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines