Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: FerJGS en 9 Agosto 2010, 00:30 am



Título: (BATCH) Tomar valor de una lista
Publicado por: FerJGS en 9 Agosto 2010, 00:30 am
Hola amigos...mi pregunta es la siguiente... Necesito que batch tome un número aleatorio, y que según ese número ç(que lo puedo sacar perfectamente con %random%...según ese número tome de una lista de txt un valor u otro para la variable...Y que la respuesta sea otro elemento de la lista.

por ejemplo yo tengo en un txt una lista con preguntas, y quiero que me coja una pregunta de forma aleatoria y se tome como valor de la variable. y después...que la respuesta se corresponda con otro elemento de la lista

algo como

número al azar %(random)
set preg=línea 5 de preguntas.txt
set resp=linea 5 de respuestas.txt
If preg=resp goto pregunta2

¿Cómo hago para que pueda tomar esos valores?


Título: Re: (BATCH) Tomar valor de una lista
Publicado por: maxx93 en 9 Agosto 2010, 02:53 am
Aca tome a random un valor de una cifra y adelante una condicion para que el random no sobrepase el numero de preguntas, en el ejemplo preguntas.txt son las preguntas y respuestas.txt son las respuestas y son en total 9 preguntas.

Código
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. :buscarnumero
  4. set num=0
  5. set /a num=%random:~3,1%
  6. if %num% geq 2 (if %num% leq 9 (goto :sig))
  7. goto :buscarnumero
  8. :sig
  9. set /a nume=%num%-1
  10. set a=0
  11. for /f "skip=%nume% delims=" %%a in ('type "preguntas.txt"') do (
  12. if !a!==0 (
  13. set preg=%%a
  14. set a=1))
  15. set b=0
  16. for /f "skip=%nume% delims=" %%a in ('type "respuestas.txt"') do (
  17. if !b!==0 (
  18. set rta=%%a
  19. set b=1))
  20. echo Pregunta %num%
  21. echo %preg%
  22. echo Escriba Respuesta:
  23. set /p resp=
  24. if %resp%==%rta% (echo Correcto) else (echo Incorrecto)
  25. pause>nul
  26.  
Salu2.


Título: Re: (BATCH) Tomar valor de una lista
Publicado por: FerJGS en 9 Agosto 2010, 16:52 pm
ya veo, bueno me falla una cosa y es que me saca dos bveces la pregunta, y cuando pongo la respuesta me sale "incorrecto". ¿Por qué? (he creado un txt con las preguntas y otro con las respuestas con sus nombres respectivos)


Título: Re: (BATCH) Tomar valor de una lista
Publicado por: maxx93 en 9 Agosto 2010, 19:34 pm
A mi me anda en code  :-\, igual aca hago una corrección
en esta parte
Citar
Código
  1. if %resp%==%rta% (echo Correcto) else (echo Incorrecto)
  2.  
corrijo...
Código
  1. if "%resp%"=="%rta%" (echo Correcto) else (echo Incorrecto)
  2.  
Ya que si es una oracion la respuesta, antes al tener espacio mandaba error y terminaba el bat.
Y con respecto a que te aparece incorrecto, quizas es que no estas escribiendo la respuesta en forma textual, osea igual que como esta en el txt.
A que te referis con que te saca dos vaces la pregunta?


Título: Re: (BATCH) Tomar valor de una lista
Publicado por: FerJGS en 9 Agosto 2010, 21:15 pm
Nada, tranquilos, ya me funciona. Ahora resulta que las preguntas son millones, entonces tengo que separarlos en varios bat, y me gustaría crear botones, resulta que no tengo mouse.exe ni click.exe para lo del manejo del ratón.

Y otra cosa...¿Puedo hacer que tres de esas respuestas sean correctas?

Por ejemplo si me saca la pregunta 1, que haya tres respuestas correctas...¿se puede hacer? muchas gracias


Título: Re: (BATCH) Tomar valor de una lista
Publicado por: maxx93 en 9 Agosto 2010, 23:35 pm
Yo lo haria asi...

Código
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. :buscarnumero
  4. set num=0
  5. set /a num=%random:~3,1%
  6. if %num% geq 2 (if %num% leq 9 (goto :sig))
  7. goto :buscarnumero
  8. :sig
  9. set /a nume=%num%-1
  10. set a=0
  11. for /f "skip=%nume% delims=" %%a in ('type "preguntas.txt"') do (
  12. if !a!==0 (
  13. set preg=%%a
  14. set a=1))
  15. set b=0
  16. for /f "skip=%nume% delims=" %%a in ('type "respuestas.txt"') do (
  17. if !b!==0 (
  18. set rta=%%a
  19. set b=1))
  20. set c=0
  21. for /f "skip=%nume% delims=" %%a in ('type "respuestas2.txt"') do (
  22. if !c!==0 (
  23. set rta2=%%a
  24. set c=1))
  25. set d=0
  26. for /f "skip=%nume% delims=" %%a in ('type "respuestas3.txt"') do (
  27. if !d!==0 (
  28. set rta3=%%a
  29. set d=1))
  30. echo Pregunta %num%
  31. echo %preg%
  32. echo Escriba Respuesta:
  33. set /p resp=
  34. set comp=0
  35. if "%resp%"=="%rta%" (set comp=1)
  36. if "%resp%"=="%rta2%" (set comp=1)
  37. if "%resp%"=="%rta3%" (set comp=1)
  38. if %comp%==1 (echo Correcto) else (echo Incorrecto)
  39. pause>nul
  40.  
Necesitarias dos txt mas el respuestas2.txt y el respuestas3.txt con las respectivas posibles respuestas.
Salu2.


Título: Re: (BATCH) Tomar valor de una lista
Publicado por: FerJGS en 10 Agosto 2010, 01:41 am
Mmmn...interesante, funciona, muchas gracias...Ahora tengo un problema...

En cada txt hay aproximadamente 700 opcione, más bien más.

Como ahs puesto set a num=%random:~3,1% solo me coge núemros muy pequeños

Si pongo set num=%random% y set /a num=%random% se me cierra la consola y el bat no va...¿cómo hago para que el número esté entre 700 posibilidades?


Título: Re: (BATCH) Tomar valor de una lista
Publicado por: leogtz en 10 Agosto 2010, 01:58 am
Si no me equivoco:
Código:
set /a num=%random% %% 701


Título: Re: (BATCH) Tomar valor de una lista
Publicado por: maxx93 en 10 Agosto 2010, 01:59 am
Tenes que remplazar
Citar
Código
  1. set /a num=%random:~3,1%
  2. if %num% geq 2 (if %num% leq 9 (goto :sig))
  3.  
por...
Código
  1. set /a num=%random:~2,3%
  2. if %num% geq 2 (if %num% leq 701 (goto :sig))
  3.  
En donde puse 701 pone el numero de lineas del archivo, una aclaracion que se me paso de largo es que la primera opcion nunca sale asi que escribi cualquier cosa en la primera linea y en donde puse 701 se refiere a 700 preguntas. Salu2.


Título: Re: (BATCH) Tomar valor de una lista
Publicado por: FerJGS en 10 Agosto 2010, 12:41 pm
Gracias Leo, ahora sí que me saca de todos los valores... Pero tranquilos, que aún tengo más problemas....En el momento que introduzco la respuesta se me cierra la consola con un error, se cierra tan rápido que no sé que error es, pero creo que he alcanzado a leer "No se esperaba (algo) en este momento.... Podríais corregir mi código chicos?
Citar
@echo off
@mode con cols=90 lines=25
setlocal enabledelayedexpansion
:start
Color F9
Echo Puede salir cerrando la consola con el bot¢n X.
set num=0
set /a num=%random% %% 701
if %num% geq 2 (if %num% leq 700 (goto :sig))
goto :buscarnumero
:sig
set /a nume=%num%-1
set a=0
for /f "skip=%nume% delims=" %%a in ('type "Pre.txt"') do (
if !a!==0 (
set preg=%%a
set a=1))
set b=0
for /f "skip=%nume% delims=" %%n in ('type "Res.txt"') do (
if !b!==0 (
set rta=%%n
set b=1))
echo Nombre el i¢n %preg%
echo.
echo Escriba la respuesta:
set /p resp=
if %resp%==%rta% (goto bien) else (goto mal)
:bien
colous 10 15 13,10 "$201$205$205$205$205$205$205$205$205$205$205$187"
colous 10 15 13,11 "$186 Correcto $186"
colous 10 15 13,12 "$200$205$205$205$205$205$205$205$205$205$205$188"
pause>nul
cls
goto start
:mal
colous 10 15 13,10 "$201$205$205$205$205$205$205$205$205$205$205$205$205$187"
colous 10 15 13,11 "$186 Incorrecto $186"
colous 10 15 13,12 "$200$205$205$205$205$205$205$205$205$205$205$205$205$188"
pause>nul
cls
goto start
exit


Título: Re: (BATCH) Tomar valor de una lista
Publicado por: FerJGS en 11 Agosto 2010, 20:04 pm
Hola chicos, he probado a abrir el photoshop (que soy más de diseño gráfico jejej) para consumir recursos del ordenador, la consola no se cerró tan rápido y he alcanzado a leer el error.. Pone

"No se esperaba +4 en este momento" (+4 era una parte de la respuesta que introduje) ¿Por qué ocurre esto? Responded chicos, muchas gracias.


Título: Re: (BATCH) Tomar valor de una lista
Publicado por: flony en 12 Agosto 2010, 01:42 am
a ver la forma mas facil de ver q esta haciendo tu bat sea malo o bueno esto lo tenes q hacer en tu bat...es
1)sacar el @echo off y todo chiches como title color etc de tu bat
2)ponerlo en c:\ con un nombre facil ejemplo 1.bat
3)si estas en xp inicio ejecutar cmd...yo ya la tengo como inicio rapido  ;D
4)todo esto en la pantalla cmd...
                                               cd C:\
                                               start 1.bat
5)esto hace que arranque tu bat y si no tiene el echo vas a ver q hace...en base a ello vas a ver los errores q te tira...de metido nomas lo digo  ;D
pero si me llamo la atencion el ejercicio..tira mas o menos lo que dicen los txt asi pruebo  ::)


Título: Re: (BATCH) Tomar valor de una lista
Publicado por: FerJGS en 12 Agosto 2010, 16:15 pm
Bien pensado lo del @echo on, gracias flony es muy buena idea y la utilizaré la próxima vez, pero el error, no está ahí, y lo he comprobado con tu idea del @echo on. El error está al introducir la respuesta, y por mucho echo on que ponga, se cierra diréctamente al escribir algo.

En las respuestas siempre hay un número entero (+2, -4 etc...) Al escribir la respuesta sale

"no se esperaba "el numero entero" en éste momento, pero como un parpadeo, es introducir la respuesta y se cierra la consola. ¿Por qué pasa eso?


Título: Re: (BATCH) Tomar valor de una lista
Publicado por: maxx93 en 12 Agosto 2010, 19:18 pm
Lee bien las respuestas, aca te explica porque...

A mi me anda en code  :-\, igual aca hago una corrección
en esta parte
Citar
Código
  1. if %resp%==%rta% (echo Correcto) else (echo Incorrecto)
  2.  
corrijo...
Código
  1. if "%resp%"=="%rta%" (echo Correcto) else (echo Incorrecto)
  2.  
Ya que si es una oracion la respuesta, antes al tener espacio mandaba error y terminaba el bat.

El error esta aca:
Citar
echo Escriba la respuesta:
set /p resp=
if %resp%==%rta% (goto bien) else (goto mal)
Tenes que poner a las variables resp y rta con entre comillas como te habia puesto antes. Salu2.


Título: Re: (BATCH) Tomar valor de una lista
Publicado por: FerJGS en 12 Agosto 2010, 21:11 pm
Ah mil gracias amigo, no me había fijado...de hecho ni me acuerdo de por qué las había quitado...
Bien ahora vuelvo a mi problema desde hace mucho: Usar el ratón en Batch...he leído un montón de tutoriales pero no los entiendo...¿qué hace eb800 y por qué...y como establezco las coordenadas...y como hago para que las detecte el debug y buff...nadie me lo explica....Lo necesito para crear "botones"


Título: Re: (BATCH) Tomar valor de una lista
Publicado por: FerJGS en 24 Agosto 2010, 01:26 am
Hola chicos, veréis tengo un problema...

Estoy usando el script de 3D1 de manejo del ratón en batch, ese de mouse_get y mouse_cmp.

El script termina con goto:EOF ...esto va bien para uno de mis bat pero tengo otro en el que se da la siguiente situación...

Hay dos botones que he creado con colous y quiero hacer que se pueda hacer clic sobre ellos. Si pongo el script al principio me va a EOF y no permite ver el resto del contenido (hay que escribir o sea que no vale pause>nul)

Si lo pongo al final no llega porque antes hay un bucle infinito en el cual se da una nueva pregunta y el usuario tiene que responder a la nueva pregunta.

¿Cómo hago para usar los botones ahí?