「Aprendiendo a usar FOR」~ Principiantes ~ By JaAViEr!★

Iniciado por JaAViEr, Julio 17, 2011, 05:17:07 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Julio 17, 2011, 05:17:07 AM Ultima modificación: Octubre 26, 2013, 11:49:39 AM por Expermicid
Tutorial Comando FOR - Principiantes - JaAViEr


Hola , Buen Día a todos.

Tras ver que varios miembros se complican con el comando FOR,
Pasaré a explicarles el FOR, FOR /F y FOR /L que son los más utilizados
luego de aprender esto entenderán el FOR /D y FOR /R...
Comencemos...
FOR Básico
El FOR es como una variable con varios contenidos por ejemplo:
Código: dos

@echo off
FOR %%A IN (ELEMENTO1 ELEMENTO2) DO (
ACCIONES
)

%%A es la variable donde almacenamos los elementos...
En Elemento1 y Elemento2 podemos modificar por lo que quieramos y en
las acciones las cosas que deseamos hacer con esos elementos.
En el IN () Deben ir los elementos, separados por comas, espacios, etc. Dentro
del DO () van las acciones a realizar sobre los elementos.
Un Sencillo ejemplo:
Código: dos

@echo off
FOR %%A IN (Javier FROM CPH) DO (
echo.%%A
)


Como verán nos dá la salida
Javier
FROM
CPH
Puesto que hemos decidido hacer un echo. mostrando
los elementos almacenados en la Variable %%A , cada vez
que recorre un elemento, vuelve al inicio y comienza con el segundo
así hasta terminar el bucle.
Otros ejemplos:
Código: dos

@echo off
FOR %%A IN (archivo1.txt archivo2.txt) DO (
DEL /F /Q /S %%A
)

Lo que borraría el archivo1.txt y archivo2.txt pues esos son los elementos
Y la acción a realizar con ellos es del /F /Q /S.

Ven que sencillo es ?


FOR /L

El Parametro /L es un como un aumentador, lo utilizamos
para evitar un código largo como:
Código: dos

@echo off
echo.Hola
echo.Hola
echo.Hola
echo.Hola
echo.Hola

Y con FOR /L :
Código: dos

@echo off
FOR /L %%A IN (1,1,5) DO (
echo.Hola
)


Es la misma salida pero uno es más corto y simple.
Como ven el IN (1,1,5) Significa:
Comienza en el número 1, luego vamos de 1 en 1 hasta
llegar al número 5.
Sin FOR se puede hacer con un IF pero es más largo:
Código: dos

@echo off
set/a"count=0"
:count
set/a"count+=1"
echo.Hola
if %count% EQU 5 (exit/b)
goto:count

En resumidas palabras el FOR /L nos sirve para
hacer un ciclo un determinado número de veces de manera
corta y sencilla.
Trabaja igual que el FOR Básico:
FOR %%A <- Guardamos los datos en %%A los cuales son solo utilizables en el DO
/L <- Es el parametro que utilizamos.
IN (1,1,5) <- Son los elementos
DO ( echo. Hola ) <- Son las acciones a trabajar con los elementos:
Código: dos

@echo off
echo.Hola 10 veces con FOR /L:
FOR /L %%A IN (1,1,10) DO (
echo.Hola %%A
)

Salida:

No olviden que cualquier duda solo deben consultar en el mismo post.


FOR /F

Este FOR /F es más extenso pues posee tokens, delims , eof, skip.
Por ahora les explicaré el tokens y el skip pues ando corto de tiempo.
Empezamos con un ejemplo básico y luego lo explico:
Código: dos

@echo off
FOR /F "tokens=1" %%A IN ('echo.Hola soy Javier') DO (echo.%%A)

Salida:

El tokens es como querer decir ... Uso el primer string hasta que haya un delimitador(espacio coma o lo que sea)
Es como sinonimo de "palabra"..
Lo que nos dá de salida:
Hola
Pues de la cadena: Hola soy Javier solo usamos el token 1, osea la primera palabra
Hola       soy         Javier
token1   token2     token3
Con el mismo ejemplo pero otros tokens y dos a la vez:
Código: dos

@echo off
FOR /F "tokens=2,3" %%A IN ('echo.Hola soy Javier') DO (echo.%%A %%B)


Como ven solo usamos el token 2 y 3 por lo que si declaramos %%A , %%A almacenará el primer token y %%B el segundo token y el Hola no es mostrado
porque no especifiqué el token 1.
Si ponemos "tokens=*" Mostraremos todo el texto...
Manipulando archivos:
Para manipular archivos solo hace falta poner el nombre del archivo, sin apostrofe (')
Código: dos

@echo off
FOR /F "tokens=*" %%A IN (archivo.txt) DO (echo.%%A)

Lo que nos daría el mismo efecto que un type archivo.txt
Si se fijan y ponen en el archivo.txt:
Código: php

Tutorial FOR By JaAViEr

Y en el FOR:
Código: dos

@echo off
FOR /F "tokens=1" %%A IN (archivo.txt) DO (echo.%%A)


Solo mostrará el primer string del archivo.txt osea Tutorial.
Recuerden que este debe existir primero.
Cuando queremos manipular comandos utilizamos el apostrofe '

Usaremos DIR en este ejemplo, la salida en este PC del comando dir es:

Código: dos

@echo off
@echo off
FOR /F "tokens=1 skip=4" %%A IN ('dir') DO (echo.%%A)

Como ven solo nos dará las fechas ...
El Skip lo explico de inmediato:

pues el token 5 es equivalente a la quinta palabra del "dir" lo que es el nombre de los archivos || carpetas.
En un proximo tutorial Medio - Avanzado explicaré como mezclar
FOR /F con find y otras cosas más.
Por ahora sigo con el SKIP:
En un Archivo tenemos el contenido:
Código: php

Hola a
Todos los
del Foro

Y solo queremos mostrar de la segunda línea en adelante y nos queremos saltar la primera línea, para ello especificaremos el skip=1:
Código: dos

@echo off
FOR /F "tokens=* skip=1" %%A IN (archivo.txt) DO (echo.%%A)

La salida:
Código: php

Todos los
del Foro

Dirán algunos... Porqué ?
Explicamos...
tokens=* <- Utilizamos todos los string que estan dentro del archivo...
skip=1 <- Nos saltamos una línea y de ahí en adelante mostrar los strings...
En resumidas palabras el skip=X es para saltarse líneas pero está casi
obsoleto porque utilizamos el FOR /F con FIND y nos simplifica todo, pero
eso es algo que veremos en el tutorial Medio-Avanzado.
Que sucede si cambiamos los tokens y skip del ejemplo anterior  ?:
Código: dos

@echo off
FOR /F "tokens=2 skip=2" %%A IN (archivo.txt) DO (echo.%%A)

Salida:

Código: php

Foro

Porqué ?
pues sencillo nos hemos saltado dos líneas de este contenido
Código: php

Hola a
Todos los
del Foro

Lo cual nos deja:
Código: php

del Foro

y como expliqué anteriormente y lo vuelvo a hacer...
  del       Foro
token1   token2
Entonces nosotros tomamos ese token2 y lo mostramos en pantalla
Dandonos el resultado : Foro
Pasemos al poco utilizado eol...
Este ejemplo lo haré con un archivo.txt con el contenido:
Código: php

Hola chicos
de portalhacker
un saludo

Lo que hace el eol es tomar un caracter como comentario...
ese caracter nosotros lo especificamos así: eol=X
Ojo que este es sensible a mayusculas y minusculas, por lo que
no es lo mismo "H" que "h"
Entonces si ese caracter se encuentra al inicio del token1 de cada
línea, se saltará esa línea porque será tomada de comentario.
Mejor les dejo un ejemplo...
Recuerden que archivo.txt es el contenido anteriormente especificado.
Veamos:
Código: dos

@echo off
FOR /F "tokens=* eol=H" %%A IN (archivo.txt) DO (
echo.%%A
)

La salida será:
Código: php

de portalhacker
un saludo

Porqué ?.
Como anteriormente les dije, si encuentra el caracter de los primeros
en el primer token, toda la línea será tomada como comentario, por lo
que no es mostrada...
Probemos cambiando el eol por eol=d...
Como deberían estár pensando, se saltara la línea
"de portalhacker"
Pues:
  de    portalhacker
token1    token2
Y en el token1 encontró que el primer caracter es "d"...
Ya vieron que sencillo es esto del FOR :D



Ejemplos
Obteniendo IP :
Código: dos

@echo off
FOR /F "tokens=14" %%A IN ('ipconfig ^| find /i "n IP."') DO (
echo.%%A
)

Obtener solo nombre de archivos y directorios de la carpeta actual:
Código: dos

@echo off
FOR /F "tokens=4 skip=7 eol=E" %%A IN ('dir') DO (echo.%%A)


Saludos.
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta


Gracias colega fhano , como no tengo Windows no puedo seguir con el :-\
Pero con lo que recuerdo, sólo pregunten e intentaré guiarlos :D
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

me quede con una duda en la parte de este codigo:
Obteniendo IP :
Código: DOS
@echo off
FOR /F "tokens=14" %%A IN ('ipconfig ^| find /i "n IP."') DO (
echo.%%A
)

que significa ^| ?
saludos y gracias de antemano :D
Pentest - Hacking & Security Services

Contact me: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
me quede con una duda en la parte de este codigo:
Obteniendo IP :
Código: DOS
@echo off
FOR /F "tokens=14" %%A IN ('ipconfig ^| find /i "n IP."') DO (
echo.%%A
)

que significa ^| ?
saludos y gracias de antemano :D
ya! estuve buscando y  | es un or pero para volcar se escribe ^| saludos buen post ;D
Pentest - Hacking & Security Services

Contact me: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

el ^ antes del | es para que sea tomado como realmente un | y no
un simple texto, ya que al tener solo el | dentro del FOR , lo toma como
texto y no para la función del ^|


Saludos.
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta