AutorTema: [Guia] Comando FOR  (Leído 727 veces)

DAMA$ GRATI$

  • Novato

  • Desconectado
  • *

  • 51
  • Karma:
    +0/-1
  • Sexo
    Masculino

    Masculino
  • Texto personal
    %100 NEGRO CUMBIERO
[Guia] Comando FOR
« : 18 de diciembre de 2009, 04:09:10 am »
--------------------
-   COMANDO FOR    -
--------------------
FOR %variable IN (cjto) DO comando

donde:
 %variable: es la variable que va a tomar el valor correspondiente en cada iteracion del for
            siendo de una unica letra, distinguiendo entre MAY y min (o numero)
 cjto: un cjto de ficheros
 comando: lo que queremos hacer en cada vuelta del for

Observaciones:
 Dentro de un bat, se debe usar %%variable (no %variable), esto se debe a que como he dicho antes,
 %variable puede tomar un numero, por lo que se podria confudir con los parametros del bat, si solo
 se pusiese un %


PARAMETROS

   FOR /D %variable IN (conjunto) comando DO [parámetros]
       se usa cuando las extensiones de comandos estan habilitadas

   FOR /R [[unidad:]ruta] %variable IN (set) DO comando [parámetros]
   Cuando usamos comodines, para ejecutar el for recursivamente dentro de un directorio especificado
        (unidad:ruta) en los archivos especificados por los comodines

   FOR /L %variable IN (ini,paso,fin) DO comando [parámetros]
    Este es el típico FOR de toda la vida. supongo ini=0 paso=1 y fin=4, se crearia la sucesion 0,1,2,3,4,5

   FOR /F ["opciones"] %variable IN (cjto archivos) DO comando [parámetros]
        Este es el que teine chichita.


FOR /F ["opciones"] %variable IN (cjto archivos) DO comando [parámetros]

En este, se procesa un conjunto de archivos, de tal forma que se abre el primer archivo, se procesa, se cierra
y se pasa al siguiente archivo del cjto.
Cada archivo se procesa por lineas, es decir, que el for sera aplicado a cada una de las lineas del archivo.
el for inicia en la primera linea, y cuando acabe su proceso digamos que se "resetea" y pasa a la siguiente linea
Las lineas en blanco se saltan
Ahora, el procesamiento de cada linea se puede modificar a nuestro antojo mediante las ["opciones"], siendo estas:

EOL=c
 Indica que se procesen todas las linbeas del archivo menos las que empiecen por este caracter

SKIP=n
 Indica el nº de linea del archivo por el que empezamos a procesarlo. es decir, si pongo skip=5, las 5 primeras lineas
 del archivo no se procesaran

DELIMS=xxx
 Dice donde (en que simbolos) se quedara el for en cada vuelta (dentro de una misma linea)

TOKENS=x,y,m-n
 Dice cuales son las vueltas validas del for, es decir, en que vueltas del for nuestra variable tomara un valor. se pueden
 poner posiciones sueltas: 2,3,4 o rangos: 1-4 o incluso los dos juntos: 1,3-5. ademas, si ponemos el *, se añade otra variable adicional
 que contendra el resto de la cadena que no haya llegado a ser procesada por el FOR

USEBACKQ
 Esto es para el uso de comillas, no es algo muy importante, pero puede ser util dependiendo de como se llamen los archivos
 que vayamos a tratar y demas. esto mirarlo si interesa en la ayuda
  
Lo que viene despues en la ayuda es sobre el uso de expansion de variables, que puede ser util, pero mejor mirarlo en la ayuda
ademas, esto se puede entender mejor en la ayuda del SET

Primero explicare como funciona el FOR /F ["opciones"] .........

Pues vamos a ver, esto lo que hace es buscar en todas las filas de un archivo. Entonces, almacena en variables el trozo de cadena
que existe entre un delimitador y otro, y asi hasta el nº de tokens.
un ejemplo cutre seria, en la linea

hola buenos dias

si el delim=" " (espacio en blanco) y tokens=1,2,3. esto significa que queremos coger 3 (1,2,3) trozos de cadena que esten uno tras
otro de forma contigua y delimitados por el espacio. asi obtendriamos 3 variables que almacenarian
i=hola
j=buenos
k=dias


Pongamos ahora un ejemplo real por si no se ha entendido.
Creamos el archivo de texto 1.txt con el siguiente contenido

----------- 1.txt
;hola buenos dias
este es un manual, dedicado al for
;para.la.gente.que.quiera.aprender
;y para los demas tambien
hasta luego
1 =Hola
2=adios
3=buenas
-----------------

vamos a realizar un primer FOR. abrimos la consola y ponemos
Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
for /f "eol=; tokens=1 delims=," %i in (1.txt) do echo %i
Este for procesara todas las lineas menos las que empiecen por ; ya que eol=;
En cada linea que procese solo dara tantas vueltas como "," se encuentre (delims=,). y almacenara en la variable %i,
solamente la parte de la cadena que se encuentre entre el principio y la primera (tokens=1) aparicion de ","
Para las lineas que no tengan "," se considera el primer token como la linea completa, porlo que en esas lineas
en vez de pasar de ella, las tomara enteras en la variable. Asi, el resultado de este for seria:

este es el manual     ---> falta lo que viene a partir de la "," porque no lo ha cogido debido al delims
hasta luego           |
1 =Hola               |-->En estas, como no hay "," coge toda la linea  
2=adios               |
3=buenas              |


Otro ejemplo mas claro seria:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
for /f "eol=; tokens=1,2,3 delims= " %i in (1.txt) do echo %i %j %k
lo mismo daria poner la parte tokens asi:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
for /f "eol=; tokens=1-3 delims= " %i in (1.txt) do echo %i %j %k
Ahora queremos coger de cada linea, menos de las que empiecen por ; (eol=;) las cadenas que se encuentren entre
token1 --> el principio y el primer " " (delims=" ")
token2 --> el primer " " y el segundo " "
token3 --> el segundo " " y el tercer " "
y el resto lo desechariamos.
Darse cuenta de que en este caso necesitamos coger 3 cosas por cada linea, por lo que no nos vale solo con la variable
%i, si no que necesitaremos tambien las %j y %k. Para esto, j y k no se declaran en el for (como la %i, de hecho
unicamente se dclara la primera que se vaya a usar, puede ser %i, %a, %1 o lo que sea), si no que se ponen en el la
parte del comando a la hora de trabajar con ellas.
Tener en cuenta tambien que si declaramos la variable %i en el for todas las que usemos deben ir consecutivas en
orden alfabetico y nunca superar los 26 simbolos. seria %i %j %k %l %m....
si seleccionamos %a en el for, seria %a %b %c %d.
y siempre diferenciando entre MAY y min.

Entonces en este ejemplo nos saldria lo siguiente:

este es un
hasta luego
1 =Hola
2=adios
3=buenas

si queremos, para verlo mas claro, podemos meter algun caracter raro entre %i, %j y %k

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
for /f "eol=; tokens=1-3 delims= " %i in (1.txt) do echo %i ? %j ? %k
Obteniendo el siguiente resultado

este ? es ? un
hasta ? luego ?
1 ? =Hola ?
2=adios ? ?
3=buenas ? ?

Vemos como en las lineas 3 y 4 aparecen las ? al final y sin nada entre medias, esto se debe a que la variable %i
contiene 2=adios (todo hasta el final) y las variables %j y %k estan vacias


Un ultimo ejemplo para ver el uso del * seria. para ello le quitamos el ; al principio de todas las lineas que lo tuvieran:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
for /f "tokens=1,2* delims= " %i in (1.txt) do echo %i ? %j ? %k
Ahora pone en las variables %i y %j:
token1 (variable %i)--> entre el principio y el primer " " (delims=" ")
token2 (variable %j)--> entre el primer " " y el segundo " "
     
y en la variable %k, que viene definida por el token *, se pondra el resto de la cadena

asi el resultado seria:

hola ? buenos ? dias
este ? es ? un manual, dedicado al for
para.la.gente.que.quiera.aprender ? ?
y ? para ? los demas tambien
hasta ? luego ?
1= ? hola ?
2=adios ? ?
3=buenas ? ?


--------------------------

por ultimo os pongo un ejemplo muy util cuando por ejemplo queremos buscar en un archivo de registro, un valor determinado.

imaginaros que quiero buscar en el archivo 1.reg, el valor de la clave SwapMouseButtons. sabiendo que en el archivo
1.reg, existe una linea que pone
SwapMouseButtons=1.
pero ademas hay muchas otras lineas similares como:
mouse=9
but=6
....

asi que si usamos el for normal sobre el archivo directamente no hay forma de sacar solo el valor que queremos
por lo que podemos hacer un find sobre el archivo que nos devuelva unicamente la linea que contiene la palabra
SwapMouseButtons, y hacer el for sobre ella. con esto quiero decir, que ademas de sobre archivos, podemos aplicar el for
sobre comandos que actuen sobre archivos y nos den lo que queremos de ellos de una forma mas especifica.
este ejemplo seria asi:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
FOR /F "tokens=1* delims==" %A IN ('FIND /I "SwapMouseButtons" c:\1.reg') do echo %B
el resultado seria que muestra por pantalla:
1
si hubiesemos puesto ..... do echo %A
mostraria por pantalla
SwapMouseButtons
« Última Modificación: 18 de diciembre de 2009, 04:12:07 am por DAMA$ GRATI$ »


CUMBIA VILLERA...PARA VOS WUACHIN!!!

CUMBIERITOS ESTUDIANTES
CUMBIERITOS ESTUDIANTES YO TENGO LA CLASE
SOY INTELIGENCIA
Y ADEMAS TENGO LA BASE
Y MUCHOS DICEN QUE VIVEN
Y QUE YO MORIRE
QUE MIRA A LEZCANO NO ESTA MAS EN LA TV
SI TRATAN DE PARARME NO ME PUEDEN VENCER
SI LLAMAN A LA POLICIA LE VAMOS A RESPOND

Peperompe

  • Moderador Global
  • User Gurú

  • Desconectado
  • ****
  • Culturahack

  • 6726
  • Karma:
    +65/-3
  • Sexo
    Masculino

    Masculino
  • Texto personal
    El conocimiento es poder
Re: [Guia] Comando FOR
« Respuesta #1 : 18 de diciembre de 2009, 02:33:31 pm »
Una guia muy completa, gracias por compartirla !!


Le ponemos chincheta   )0(
Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
SI YO COMPARTO MI DINERO CONTIGO, QUEDA LA MITAD, SI YO COMPARTO EL CONOCIMIENTO, QUEDA EL DOBLE.
EL CONOCIMIENTO ES PARTE DE LA HUMANIDAD

Tags:
 
Compartir este Tema...
En un Foro
(BBCode)
En un Sitio Web/Blog/Twitter/Facebook
(HTML)





Powered By Satel Group® Web Hosting Diseño Publicidad y Servicio Tecnico