Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: DA KILLER en 19 Julio 2010, 16:47 pm



Título: [Batch] Consulta (SOLUCIONADO)
Publicado por: DA KILLER en 19 Julio 2010, 16:47 pm
Buenas, me he quedado atorado en un problema y no se como abordarlo  :-[

Quiero que el batch busque una variable ingresada por el usuario en un archivo de texto., lo que no logro hacer es que el script busque EXACTAMENTE lo ingresado por el usuario, normalmente si uno ingresa un caracter el script devuelve todos los resultados con dicho caracter, lo que busco es que solo mostrase los resultados exactos, y en caso de no haber ninguno diera un mensaje de error, no se si es posible eso.

Desde ya, muchas gracias.


Título: Re: [Batch] Consulta
Publicado por: FerJGS en 19 Julio 2010, 17:51 pm
Utiliza FINDSTR /c y un For /f


Título: Re: [Batch] Consulta
Publicado por: flony en 19 Julio 2010, 20:05 pm
este code me dio hace tiempo leo y sirve
Código:
For /f "tokens=2 delims=:" %%a in ('FIND /I " LoQueQuieresEncontrar" dir.txt') do (set pa=%%a)


Título: Re: [Batch] Consulta
Publicado por: leogtz en 19 Julio 2010, 20:15 pm
Código
  1. findstr /X /R "%variable%" || {
  2. echo No se encontro nada.
  3. }

Código:
/X   Print lines that match exactly.

Aquí va a depender mucho de lo que ingrese el usuario.

Si ingresa "hola", findstr debería buscar solo las líneas que tengan:
Código:
hola

Creo que debería funcionar.


Título: Re: [Batch] Consulta
Publicado por: DA KILLER en 20 Julio 2010, 01:10 am
ah ok, porque en la ayuda de la shell (de mi versión de windows) dice: "/X        Imprime líneas que no coinciden con exactitud." así que me volvía loco sin sentido :$

bueno, mas tarde lo pruebo y confirmo.

Otra duda que me surgió, es si es posible añadir a esta lína un indicador de modo que con otro for pueda comparar la concordancia con otra variable extraída de otro archivo.

para que se entienda hacer que en el primer for se compare una variable con el contenido de un archivo (en este caso listado de usuarios) y setee otra variable para su posterior uso en otro for (que quedase algo como "2)username" y en otro archivo con los pass compare otro valor ingresado por el usuario, el password "2)password" y cotejara los mismos).

Me tengo que ir, pero más tarde cuando vuelva les doy el code y me dicen que es lo que está fallando.

PD: GRACIASSSSSSSSSSS


Título: Re: [Batch] Consulta
Publicado por: DA KILLER en 20 Julio 2010, 06:02 am
De momento estoy experimentando un problema con la shell que no se a que se debe, pero se tilda al ejecutar el comando FIND o FINDSTR, ya sea desde cmd, DOS como OS o desde un script.

Generalmente se tilda el proceso y no me permite siquiera terminarlo mediante ^C, sino desde taskmgr, así que si me pudiesen ayudar con otra forma de hacerlo se los agradeceré enormemente, lamento malgastar su tiempo pero no logro solucionar el problema y es parte de un programa con el que vengo renegando de hace una semana y aún no llego ni a hacer un tercio de lo que debe hacer :$


Título: Re: [Batch] Consulta
Publicado por: leogtz en 20 Julio 2010, 06:56 am

para que se entienda hacer que en el primer for se compare una variable con el contenido de un archivo (en este caso listado de usuarios) y setee otra variable para su posterior uso en otro for (que quedase algo como "2)username" y en otro archivo con los pass compare otro valor ingresado por el usuario, el password "2)password" y cotejara los mismos).
Pon un ejemplo aquí mismo para ver cómo proceder.
De momento estoy experimentando un problema con la shell que no se a que se debe, pero se tilda al ejecutar el comando FIND o FINDSTR, ya sea desde cmd, DOS como OS o desde un script.


¿Qué código estás utilizando?


Título: Re: [Batch] Consulta
Publicado por: DA KILLER en 20 Julio 2010, 06:59 am
FINDSTR /X /S "line" test.txt


Título: Re: [Batch] Consulta
Publicado por: leogtz en 20 Julio 2010, 07:04 am
¿No será por la opción /s que busca en las subcarpetas?


Título: Re: [Batch] Consulta
Publicado por: DA KILLER en 20 Julio 2010, 07:08 am
y sobre el ejemplo es lo que me esta volviendo loco, yo tendría 3 datos:

1) Los ingresados por el usuario (login.bat)
2) Los de un archivo con los nombres de usuario (ucrlst.txt)
3) Las contraseñas de los usuarios (passlst.txt)

Lo que yo quiero es que primero el usuario ingrese el nombre de usuario del programa (ejemplo "KILLER")
Luego el script lo busque en ucrlst.txt (a modo de ejemplo supongamos que ucrlst.txt tiene el siguiente contenido:
KILLER
DA KILLER
THE KILLER
USER)
Luego, si el usuario existe (lo encuenta en ucrlst.txt) proceda a pedir un pass, el cual cotejará con el contenido de passlst.txt.

He aquí los dilemas:

1º) No sabía como hacer para que el script solo devuelva los valores que correspondan exactamente (si el usuario escribe "KILLER" que coteje el pass de "KILLER" y no de "THE KILLER")
2º) No se me ocurre como indicar al script cual es la pass de cada usuario, teniendo todas en un mismo archivo

y ahora compruebo y te digo el error, o se tilda o me dice 'Se ha alcanzado el máximo nivel de recursividad de "setlocal"' y sino activo la expansion no me permite utilizar el comando FINDSTR


Título: Re: [Batch] Consulta
Publicado por: DA KILLER en 20 Julio 2010, 07:09 am
por si ayuda en algo el contenido de "test.txt" es:
Código:
First Line.
U'line.
example line.
Final Line.


Título: Re: [Batch] Consulta
Publicado por: leogtz en 20 Julio 2010, 07:14 am
¿Leíste mi anterior respuesta?


Título: Re: [Batch] Consulta
Publicado por: DA KILLER en 20 Julio 2010, 07:16 am
la del /s? si, igual resultado :(

Siempre el script o se me tilda o me dice 'Se ha alcanzado el máximo nivel de recursividad de "setlocal"' y sino activo la expansion no me permite utilizar el comando FINDSTR


Título: Re: [Batch] Consulta
Publicado por: leogtz en 20 Julio 2010, 07:21 am
la del /s? si, igual resultado :(

Siempre el script o se me tilda o me dice 'Se ha alcanzado el máximo nivel de recursividad de "setlocal"' y sino activo la expansion no me permite utilizar el comando FINDSTR

¿Pero qué tiene que ver "setlocal" en este simple código?:
Código:
FINDSTR /X /S "line" test.txt

Coloca TODO el código.


Título: Re: [Batch] Consulta
Publicado por: DA KILLER en 20 Julio 2010, 07:22 am
Código:
@echo off
@color 0A
setlocal enableextensions enabledelayedexpansion
echo. El programa empieza
FINDSTR /X "line" test.txt
echo. Se llego al pause
pause >nul


Título: Re: [Batch] Consulta
Publicado por: leogtz en 20 Julio 2010, 07:37 am
Bueno, no deberías usar setlocal si no lo vas a usar, quitalo.

Prueba con:
type "test.txt" | findstr /x "line"

A ver como va.


Título: Re: [Batch] Consulta
Publicado por: DA KILLER en 20 Julio 2010, 07:52 am
nada, puff, así ni ganas da de perder tiempo en batch :(

PD: Gracias por tomarte tu tiempo leo, no se que estará fallando :(


Título: Re: [Batch] Consulta
Publicado por: leogtz en 20 Julio 2010, 21:21 pm
La verdad no sé que estará pasando, porque el código no debería de fallar.

Intenta hacerlo en otra máquina, a ver si da el mismo error.


Título: Re: [Batch] Consulta
Publicado por: DA KILLER en 20 Julio 2010, 23:49 pm
ESE es el tema, por el momento no tengo acceso a ninguna otra computadora, pero a la noche si encuentro el CD del XP me creo una máquina virtual y listo.

Sino, no se si se podría hacer de otra forma o en vbs


Título: Re: [Batch] Consulta
Publicado por: DA KILLER en 21 Julio 2010, 00:08 am
Problema SEMI-solucionado, si le doy "findstr /X "U test.txt" tira error, pero si pongo "findstr "U" test.txt" sale bien, este DOS :-\

Agrego el code final:

Código:
@echo off
color 0A
echo. El programa empieza
findstr "U" test.txt
echo. Se llego al pause
pause >nul

Ahora, hay alguna forma de hacer lo otro, o al tratar en batch le estoy "pidiendo peras al olmo".

PD: muchas gracias por la paciencia leo, se que soy molesto a veces :$


Título: Re: [Batch] Consulta
Publicado por: leogtz en 21 Julio 2010, 00:34 am
Otra cosa sería usar otro findstr.exe para ver si el problema proviene de ahí.

Y si tu quieres buscar solo la palabra "line" en el archivo de texto, usando findstr /r y una expresión regular debería funcionar:

Código:
findstr /r "^line$"
Código:
findstr /r "^\<line\>$"
Código:
findstr /r "\<line\>"


Título: Re: [Batch] Consulta
Publicado por: DA KILLER en 21 Julio 2010, 01:03 am
Ah eso me mareaba, por lo que decidí usar un /B y arreglar el script principal para que escriba los usuarios en renglones separados al archivo, pero se puede lo de mediante el usuario darle la indicación al programa para buscar el pass?

PD: soy un pedazo de ********!, claro que se puede, solo tengo que ver como hago para que mediante el errorlevel pueda hacer que si el usuario es encontrado vaya a un label y sino vaya a otro, eso se puede hacer?

PD2: Ahí me puse las pilas 5 segundos y lo entendí, ya está y funciona, gracias leo, me podrías echar un cable con la devolución del errorlevel


Título: Re: [Batch] Consulta
Publicado por: DA KILLER en 21 Julio 2010, 01:19 am
ya está el errorlevel incluido:

Código:
@echo off
color 0A
set/P "search= User: "
findstr /R /B /C:"^%search%$" test.txt
if %errorlevel% gtr 0 (goto:mal) ELSE (goto:bien)
:mal
echo. ERROR, THE SYSTEM CAN'T FIND THAT USER.
goto:salir
:bien
echo. PROCESS SUCESSFULLY!
goto:salir
:salir
pause >nul
exit /b 0

Pues creo que estaría, se hizo largo el post, pero bueno, gracias a todos los que colaboraron y especialmente a Leo.

Saludos y gracias de nuevo!


Título: Re: [Batch] Consulta
Publicado por: leogtz en 21 Julio 2010, 01:21 am
Sobre el primer PD, claro que se puede.

Suponiendo que usaste esta línea de las que te dejé(y que te haya funcionado, claro):
Código:
findstr /r "\<line\>"

Lo que tu pides se llama ejecución condicional:
Código
  1. findstr /r "\<line\>" && (
  2.    echo Encontrado
  3.    goto:si
  4. ) || (
  5.    echo No encontrado
  6.    goto:no
  7. )


Título: Re: [Batch] Consulta
Publicado por: DA KILLER en 21 Julio 2010, 01:26 am
no, lo hice con errorlevel :$

(no sabía lo de la ejecución condicional, gracias por el dato)

lo que yo digo es que puedo usar el user como delimitador en un bucle for y solo hago que el bucle setee una variable, (la cual se comparará con el pass), y listo n.n!


Título: Re: [Batch] Consulta
Publicado por: leogtz en 21 Julio 2010, 06:29 am
Entonces, ¿solucionado?


Título: Re: [Batch] Consulta (SOLUCIONADO)
Publicado por: DA KILLER en 21 Julio 2010, 06:37 am
Se cortó la luz 5 minutos después de que se me ocurrió como hacerlo :$, ya lo puse y gracias otra vez