help_outline
Ayudanos!
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

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

  • 5 Respuestas
  • 3318 Vistas

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

Desconectado JaAViEr

  • *
  • Underc0der
  • Mensajes: 163
  • Actividad:
    0%
  • Reputación 0
  • http://codigo.ga
    • Ver Perfil
    • Blog de Programación :: Python
« en: Julio 17, 2011, 05:17:07 am »
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
  1. @echo off
  2. FOR %%A IN (ELEMENTO1 ELEMENTO2) DO (
  3. ACCIONES
  4. )
  5.  
%%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
  1. @echo off
  2. FOR %%A IN (Javier FROM CPH) DO (
  3. echo.%%A
  4. )
  5.  

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
  1. @echo off
  2. FOR %%A IN (archivo1.txt archivo2.txt) DO (
  3. DEL /F /Q /S %%A
  4. )
  5.  
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
  1. @echo off
  2. echo.Hola
  3. echo.Hola
  4. echo.Hola
  5. echo.Hola
  6. echo.Hola
  7.  
Y con FOR /L :
Código: DOS
  1. @echo off
  2. FOR /L %%A IN (1,1,5) DO (
  3. echo.Hola
  4. )
  5.  

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
  1. @echo off
  2. set/a"count=0"
  3. :count
  4. set/a"count+=1"
  5. echo.Hola
  6. if %count% EQU 5 (exit/b)
  7. goto:count
  8.  
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
  1. @echo off
  2. echo.Hola 10 veces con FOR /L:
  3. FOR /L %%A IN (1,1,10) DO (
  4. echo.Hola %%A
  5. )
  6.  
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
  1. @echo off
  2. FOR /F "tokens=1" %%A IN ('echo.Hola soy Javier') DO (echo.%%A)
  3.  
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
  1. @echo off
  2. FOR /F "tokens=2,3" %%A IN ('echo.Hola soy Javier') DO (echo.%%A %%B)
  3.  

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
  1. @echo off
  2. FOR /F "tokens=*" %%A IN (archivo.txt) DO (echo.%%A)
  3.  
Lo que nos daría el mismo efecto que un type archivo.txt
Si se fijan y ponen en el archivo.txt:
Código: [Seleccionar]
Tutorial FOR By JaAViEr
Y en el FOR:
Código: DOS
  1. @echo off
  2. FOR /F "tokens=1" %%A IN (archivo.txt) DO (echo.%%A)
  3.  

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
  1. @echo off
  2. @echo off
  3. FOR /F "tokens=1 skip=4" %%A IN ('dir') DO (echo.%%A)
  4.  

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: [Seleccionar]
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
  1. @echo off
  2. FOR /F "tokens=* skip=1" %%A IN (archivo.txt) DO (echo.%%A)
  3.  
La salida:
Código: [Seleccionar]
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
  1. @echo off
  2. FOR /F "tokens=2 skip=2" %%A IN (archivo.txt) DO (echo.%%A)
  3.  
Salida:

Código: [Seleccionar]
Foro
Porqué ?
pues sencillo nos hemos saltado dos líneas de este contenido
Código: [Seleccionar]
Hola a
Todos los
del Foro
Lo cual nos deja:
Código: [Seleccionar]
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: [Seleccionar]
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
  1. @echo off
  2. FOR /F "tokens=* eol=H" %%A IN (archivo.txt) DO (
  3. echo.%%A
  4. )
  5.  
La salida será:
Código: [Seleccionar]
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
  1. @echo off
  2. FOR /F "tokens=14" %%A IN ('ipconfig ^| find /i "n IP."') DO (
  3. echo.%%A
  4. )
  5.  
Obtener solo nombre de archivos y directorios de la carpeta actual:
Código: DOS
  1. @echo off
  2. FOR /F "tokens=4 skip=7 eol=E" %%A IN ('dir') DO (echo.%%A)
  3.  

Saludos.
« Última modificación: Octubre 26, 2013, 11:49:39 am por Expermicid »

Desconectado LucaSthefano

  • *
  • Underc0der
  • Mensajes: 399
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #1 en: Julio 17, 2011, 11:38:04 pm »
Excelente aporte compañero, 100% entendible.

Fijado!

Desconectado JaAViEr

  • *
  • Underc0der
  • Mensajes: 163
  • Actividad:
    0%
  • Reputación 0
  • http://codigo.ga
    • Ver Perfil
    • Blog de Programación :: Python
« Respuesta #2 en: Julio 17, 2011, 11:57:15 pm »
Gracias colega fhano , como no tengo Windows no puedo seguir con el :-\
Pero con lo que recuerdo, sólo pregunten e intentaré guiarlos :D

Desconectado arthusu

  • *
  • Underc0der
  • Mensajes: 554
  • Actividad:
    3.33%
  • Reputación 2
  • Yo solo se que no se nada - Socrátes
    • Ver Perfil
    • Arthusu BLOG
  • Skype: arthusuxD
« Respuesta #3 en: Agosto 28, 2011, 05:21:33 pm »
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: arthusu@gmail.com

Desconectado arthusu

  • *
  • Underc0der
  • Mensajes: 554
  • Actividad:
    3.33%
  • Reputación 2
  • Yo solo se que no se nada - Socrátes
    • Ver Perfil
    • Arthusu BLOG
  • Skype: arthusuxD
« Respuesta #4 en: Agosto 28, 2011, 05:40:39 pm »
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: arthusu@gmail.com

Desconectado JaAViEr

  • *
  • Underc0der
  • Mensajes: 163
  • Actividad:
    0%
  • Reputación 0
  • http://codigo.ga
    • Ver Perfil
    • Blog de Programación :: Python
« Respuesta #5 en: Septiembre 05, 2011, 04:04:46 pm »
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.

 

¿Te gustó el post? COMPARTILO!



Detecta Autorun.Inf + Eliminación de Archivo Infectado - JaAViEr - Batch

Iniciado por JaAViEr

Respuestas: 4
Vistas: 2275
Último mensaje Julio 18, 2011, 06:36:47 pm
por LucaSthefano
[Código-Batch] Consola de Comandos Versión Arcoiris - JaAViEr

Iniciado por JaAViEr

Respuestas: 0
Vistas: 1574
Último mensaje Julio 17, 2011, 05:29:39 am
por JaAViEr
[Código-Batch] Usuarios del PC & Procesos Ejecución - WMIC - JaAViEr

Iniciado por JaAViEr

Respuestas: 0
Vistas: 1317
Último mensaje Julio 17, 2011, 05:21:18 am
por JaAViEr
[Código-Batch] Saber si un número es entero - JaAViEr

Iniciado por JaAViEr

Respuestas: 0
Vistas: 1277
Último mensaje Julio 17, 2011, 05:19:17 am
por JaAViEr
[Código-Batch] Sumando con DEBUG - JaAViEr

Iniciado por JaAViEr

Respuestas: 0
Vistas: 1216
Último mensaje Julio 17, 2011, 05:24:26 am
por JaAViEr