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

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Ayuda con FOR en Batch!!
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con FOR en Batch!!  (Leído 5,515 veces)
dArKo2

Desconectado Desconectado

Mensajes: 59



Ver Perfil
Ayuda con FOR en Batch!!
« en: 16 Septiembre 2010, 07:46 am »

todavia tengo algunos problemas o mejor dicho muchos problemas para usar el FOR en Batch me parece que las explicaciones que eh leido son muuuuy complicadas y los ejemplos muuuuuuuy vacios...por favor ayuda!! :-\


En línea

"We seek only reprieve and welcome the darkness"
flony


Desconectado Desconectado

Mensajes: 583



Ver Perfil
Re: Ayuda con FOR en Batch!!
« Respuesta #1 en: 16 Septiembre 2010, 12:58 pm »

a ver el tutorial de leo es muy completo...aparte tenes paginas por eje http://ss64.com/nt/for_f.html...y bue aparte de eso los pedidos que hacen aca si los vas leyendo y viendo que respuesta tienen...si pones tus dudas o sea el code te van a tirar propuestas


En línea

si un problema no tiene solucion entonces no es un problema...es algo inevitable
FerJGS

Desconectado Desconectado

Mensajes: 75


Ver Perfil
Re: Ayuda con FOR en Batch!!
« Respuesta #2 en: 16 Septiembre 2010, 22:03 pm »

Hola Sloth...ya te ayudo yo...

For %%a in (conjunto) do (Acciones)

Si la variable la introducimos en el código, lleva dos porcentajes, es una sola letra y se distinguen entre mayúsculas y minúsculas) [%%A != %%a]

definimos el conjunto, que es el conjunto de instrucciones o archivos con los que queremos trabajar, y en do introducimos todas las instrucciones.

por ejemplo

For %%x in (archivo1.txt archivo2.exe) do (del /f /q %%x)

Con esto, estamos llamando al conjunto con la variable %%x, y en las instrucciones, borramos esos dos archivos porque %%x se refiere al conjunto...

a parte del conjunto que contiene la variable %%a

FOR %%var IN (d*) DO echo %%var
Lo que hacemos con el for es que nos muestre todos los archivos que comiencen por la letra "d" en el directorio predeterminado o el especificado por cd\push o popd (comando CD: posicionarse en otra carpeta)

*.exe = Todos los archivos que acaben en .exe
?.exe = Todos los archivos que tengan UNA letra y acaben en .exe

*= caracteres cualquiera
?=único carácter (cualquiera)

Veamos como usar FOR para los bucles

Hemos de añadir el modificador /L (de loop – bucle)

For /L %%variable (valor inicial, incremento por repetición, final (detención)) do (comandos)

Definiremos el valor inicial de la variable pero con los dos por cientos al principio. Después, entre paréntesis, pondremos el valor inicial, después la condición para que se siga repitiendo el bucle (mientras), y por último, el cambio por repetición. Do (hacer) especifica (entre paréntesis) los comandos que se hacen durante el bucle.

FOR /L %%x in ( 0,1,5 ) Do ( echo %%x )

te devuelve

0
1
2
3
4
5

Aquí lo vemos claramente: 0 es el valor inicial, aumenta 1 cada repetición y el final se da cuando la variable alcanza 5. Se mostrarán esos números porque hemos elegido en “do” que echo muestre el valor de la variable en cada repetición. Cualquiera de los tres valores puede ser una variable.

for /l %%i in (2 1 %potencia%) do (
set /a resultado=resultado * %base%
)

Esto nos puede servir para mostrar un resultado de “ir probando”. Por ejemplo, a la hora de calcular una raíz, cada repetición irá aumentando uno hasta que “If” coincida con la fórmula de la raíz cuadrada. Esto es muy cómodo, ocupa mucho menos espacio y muestra los resultados más precisos, pero es más complicado.
 
FOR %%x in (x*) DO echo %%x
 
Esto mostrará todos los archivos que empiecen por X.

Hay dos modificadores más.

FOR /D %%x in (m*) DO echo %%x
 
Con /d mostrará solo los directorios que empiecen con M.

Y el más importante y complejo, el modificador /f.

El conjunto puede contener
Conjunto de archivos > sin comillas
Cadena de caracteres > con comillas dobles [ " " ]
Comando •> con comilla simple [ ' ' ]

OPCIONES

• Eol -> Todo lo que esté después de éste carácter (especificado con eol) será ignorado (para cada línea)

• Skip -> Es el número de líneas a saltarse al principio de un archivo o comando.

• Delims -> Delims nos sirve para separar strings, si no se coloca esta opción, se usarán como separadores "espacio" y "tab."

• Tokens -> Con tokens especificamos qué segmentos (palabras), delimitados por "delims", serán pasados a las variables... por ejemplo:

1, 2, 3
Solo pasará los primeros 3 segmentos.

1,2*
Pasa 2 segmentos, el primero y todo lo que este después (el * regresa todo el resto de la línea)

1,2,3-7.8.9-14,16*
Pasará los tres primeros segmentos, luego saltará al séptimo, seguirá has el noveno. Luego saltará al 14, salta al dieciséis hasta que se acaben los segmentos.

• Usebackq ->Cambia la forma de interpretar si es string o comando.

Pueden combinarse dos o más atributos para /f.

FOR /F "tokens=1,2-4,8,9,10*" %%a IN ("Con for f tokens podemos delimitar como palabra varias palabras y mostrarlas como variables consecutivas”) DO echo %%a %%b %%d %%e %%f %%g %%h
Esta línea dará como resultado lo siguiente:

Con for tokens palabra varias palabras y mostrarlas como variables consecutivas

Podemos, por tanto, elegir qué palabras mostrar. Ahí va un ejercicio, utilizando FOR, haz un buscador de archivos  (El usuario ha de elegir la palabra o palabras que quiere buscar, utilizad set /p, y esa variable será lo que for tenga que buscar.)

Aquí te dejo algunos códigos parecidos.

Citar
::Saber las líneas de un archivo by PyXOLo
@echo off
:contador
set /p archivo=RUTA=
set cuenta=0
for /f %%x in (%archivo%) do set /a cuenta=1+cuenta
set funcion=%cuenta%
echo %funcion%
pause>nul

::Extraer la IP privada de tu ordenador en una variable por PyXOLo
@echo off
For /f "tokens=14 skip=5" %%x IN ('ipconfig') Do set ip=%%x
echo %ip%
pause>nul
goto EOF

::Sacar la ruta de un proceso (by RockoX)
@echo off
rem Sacando la ruta de un ejecutable activo.   
(cd %homedrive%\)
:Code
(cls)
(set /p proceso=Nombre de proceso : )
(if not defined proceso (goto:Code))
for /f "tokens=*" %%x in ('wmic process get executablepath ^| find /i "%proceso%"') do (set ruta=%%x)
(echo %ruta%)
(pause>nul)
(goto:eof)

También hay más tipos de for, como for /r, esto hará una lista de archivos de la ruta:
For /r C:windows %a in (Set) do Echo %a   …. Pero volvemos al for f tokens.
Esto nos viene muy bien, por ejemplo, si queremos tomar una pregunta de un txt.
:buscarnumero
set num=0
set /a num=%random% %% 100
if %num% geq 2 (if %num% leq 100 (goto :sig))
goto :buscarnumero
:sig
set /a nume=%num%-1
set a=0
for /f "skip=%nume% delims=" %%a in ('type "Preguntas.txt"') do (
if !a!==0 (
set preg=%%a
set a=1))
set b=0
for /f "skip=%nume% delims=" %%a in ('type "Respuestas.txt"') do (
if !b!==0 (
set rta=%%n
set b=1))
echo %preg%
If "%resp%"=="%rta%" (goto bien) else (goto mal)

Con esto tomará un número aleatorio entre 0 y 100, restamos uno para que se salte una línea menos, y de ahí tomamos el valor en el archivo preguntas.txt, haceos lo mismo con las respuestas, mostramos la pregunta, si la respuesta escrita por el usuario coincide con la tomada del archivo, irá a bien. Analizad este código.
En línea

dArKo2

Desconectado Desconectado

Mensajes: 59



Ver Perfil
Re: Ayuda con FOR en Batch!!
« Respuesta #3 en: 17 Septiembre 2010, 05:15 am »

sufieciente para unas buenas hora leyendo...gracias por tu respuesta..
En línea

"We seek only reprieve and welcome the darkness"
dArKo2

Desconectado Desconectado

Mensajes: 59



Ver Perfil
Re: Ayuda con FOR en Batch!!
« Respuesta #4 en: 18 Septiembre 2010, 01:55 am »

gracias de veras muchas gracias  ;D estoy empesando a entender el uso de For  ;-)







saludos
En línea

"We seek only reprieve and welcome the darkness"
dArKo2

Desconectado Desconectado

Mensajes: 59



Ver Perfil
Re: Ayuda con FOR en Batch!!
« Respuesta #5 en: 19 Septiembre 2010, 05:20 am »

otra pregunta que es mas una duda que otra cosa en esta linea:

for %%a in (*.pif) do call %0 *** inf %%a

no deberia de haber unos parentesis? algo como esto?
for %%a in (*.pif) do (call) %0 *** inf %%a
En línea

"We seek only reprieve and welcome the darkness"
Norlak

Desconectado Desconectado

Mensajes: 101


Ver Perfil
Re: Ayuda con FOR en Batch!!
« Respuesta #6 en: 22 Septiembre 2010, 08:23 am »

no deberia de haber unos parentesis? algo como esto?
for %%a in (*.pif) do (call) %0 *** inf %%a

creo si no me equivoco,

for %%a in (*.pif) do (call %0 *** inf %%~a)


creo que ademas se le debe de añadir el signo " ~ (altgr + 4) " a la segunda variable pero ya te digo no estoy muy seguro, tambien estoy empezando con el comando FOR.

un saludo espero que te sirva.  ;D
En línea

Rectificar es de sabios, aprende de tus errores para ser alguien mejor.
flony


Desconectado Desconectado

Mensajes: 583



Ver Perfil
Re: Ayuda con FOR en Batch!!
« Respuesta #7 en: 22 Septiembre 2010, 13:30 pm »

Código:
for %%a in (*.pif) do call %0 *** inf %%a
hola
si el parentesis debe estar...eso si no se donde empieza y si termina ahi el renglon...
una pregunta que es lo q se supone hace ese for....xq por lo q parece (in) a todo archivo pif (do) hacer
1)ejecutar el bat que le dio origen
2)*** esta parte ni a palo q quiere decir
3)aca recien aparece la variable del for ?
En línea

si un problema no tiene solucion entonces no es un problema...es algo inevitable
dArKo2

Desconectado Desconectado

Mensajes: 59



Ver Perfil
Re: Ayuda con FOR en Batch!!
« Respuesta #8 en: 23 Septiembre 2010, 01:32 am »

los asteriscos son el nombre del archivo que estoy llamando  :-[
En línea

"We seek only reprieve and welcome the darkness"
flony


Desconectado Desconectado

Mensajes: 583



Ver Perfil
Re: Ayuda con FOR en Batch!!
« Respuesta #9 en: 25 Septiembre 2010, 04:43 am »

si pero alcanza con uno solo para que tres?
y para que el %%a al final

y estaba buscando sobre archivos pif...y pareciera que hace rato no reconoce esa terminacion desde los windows 95 para adelante
En línea

si un problema no tiene solucion entonces no es un problema...es algo inevitable
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines