Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Dirpok en 9 Junio 2008, 16:33 pm



Título: Cronometro en BATCH
Publicado por: Dirpok en 9 Junio 2008, 16:33 pm
Hola.
Recien acabo de empezar con el batch, he echo una calculadora y 4 o 5 tonterias mas para aprender
pero.. como podria hacer un cronometro?
tengo un proyecto en mente de un cronometro y no se ni por donde empezar
comando sleep?
ping -n 127.0.0.1>nul ?

El proyecto sera un cronometro que con la tecla espacio empezará y con la misma parará el cronometro. habra un ranking de tiempos y con el tiempo ire añadiendo nuevas funciones para tener un cronometro sencillo y rapido y con todo lo necesario
Es mas que nada para los aficionados al cubo de rubik como yo, para poder cronometrar nuestros tiempos de forma muy muy rapida y sin programas pesados :P

Muchisimas gracias de antemano
Un cordial saludo

Dirpok.


Título: Re: Cronometro en BATCH
Publicado por: leogtz en 9 Junio 2008, 18:49 pm
Que empieces con cosas sencillas, no es ninguna tonteria.
Yo hace rato que estaba aprendiendo hice un cronometro sencillo en Batch, con cuenta ascendente y descendente.

PD : Yo no tengo el comando Sleep


Código
  1. @echo off
  2. Title Cronometro by RockoX
  3. color d
  4. :menu
  5. cls
  6. echo                   ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
  7. echo                   º          Cronometro by RockoX 1.2        º
  8. echo                   ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹
  9. echo                               1.-Cuenta ascendente
  10. echo                               2.-Cuenta descendente
  11. echo                               3.-Salir
  12. set /p opc=                        Teclee el numero de la opcion dada:
  13. if [%opc%]==[] cls & Echo                               No has puesto nada! & pause>nul & goto menu
  14. if %opc%==1 goto asc
  15. if %opc%==2 goto desc
  16. if %opc%==3 goto salir
  17. :asc
  18. cls
  19. color a
  20.  
  21. :Empezar
  22. cls
  23. Set /p Comenzar=Teclee un numero para empezar:
  24. if ["%Comenzar%"]==[""] (
  25. goto:Empezar
  26. )
  27.  
  28. :Detencion
  29. cls
  30. set /p Detener=Indique el numero en el que parara:
  31. if ["%detener%"]==[""] (
  32. goto:Detencion
  33. )
  34.  
  35. :inicio
  36. cls
  37. echo                                         %Comenzar%
  38. ping -n 1,5 localhost>nul
  39. set /a Comenzar=%Comenzar%+1
  40. if %Comenzar%==%Detener% goto terminado
  41. goto inicio
  42. :terminado
  43. cls
  44. msg * La cuenta ha terminado...
  45. goto menu
  46. :desc
  47. color b
  48. cls
  49. set /p iniciar=Teclee el numero para empezar:
  50. cls
  51. set uno=1
  52. :empieza
  53. cls
  54. echo                                       %iniciar%
  55. set /a iniciar=%iniciar%-%uno%
  56. ping -n 1.5 localhost>nul
  57. if %iniciar%==0 goto terminado
  58. goto empieza
  59. :salir
  60. msg * by RockoX!
  61.  


Con respecto a lo de empezar con la tecla Espacio del teclado, no creo que sea posible.
Pero puedes detener el Batch en Ejecucion con  CTRL + S


Saludos
 :)




Título: Re: Cronometro en BATCH
Publicado por: Dirpok en 9 Junio 2008, 20:47 pm
 :D :D Muchisimas gracias!! buen programa
Yo exactamente quiero una cosa rapida, que al apretar alguna tecla (ya que con espacio no se puede) empieze a cronometrar, y con otra lo mismo
Todo esto y mucho mas lo hare si me das el permiso de basarme en tu programa para hacer mi cronometro para los Fans de Rubik :D:D
en el menú pondre Basado en el cronometro de RockoX o lo que creas apropiado y en el leeme te dare las gracias ;)

Muchisimas gracias de antemano.

PD: El programa en un principio estara en catalan y castellano. pero tengo en mente traducirlo al ingles y al frances / italiano / aleman o mas lenguas si encuentro a gente :D


Título: Re: Cronometro en BATCH
Publicado por: leogtz en 9 Junio 2008, 23:26 pm
Naaa, no hay de que Dirpok, estamos para ayudar  :)

Saludos!


Título: Re: Cronometro en BATCH
Publicado por: Dirpok en 10 Junio 2008, 14:36 pm
Muchisimas gracias! :D
si quieres agregame y te mantendre informado sobre el programa

Oye. esto tarda menos que un segundo :S probe de ponerlo en 2.0 y tarda mas que un segundo :(
Hay alguna manera de ver decimas?


Título: Re: Cronometro en BATCH
Publicado por: leogtz en 10 Junio 2008, 22:27 pm
Los ping -n

Cambialos por
Código:
Ping -n 2

Que masomenos corresponderia a 1 segundo..
Saludos


Título: Re: Cronometro en BATCH
Publicado por: carlitos.dll en 11 Junio 2008, 02:12 am
... espera, se me está ocurriendo una forma de hacerlo, pido un poco de tiempo.

Nota: RockoX, está bueno el code, eso si, presionas por ejemplo un número mayor que 3, no lo valida.



Título: Re: Cronometro en BATCH
Publicado por: carlitos.dll en 11 Junio 2008, 05:22 am
Listo. Espero que sirva Dirpock.

Código:
::CarlitoS.dll
@echo off
color 70
set /a cont =0
pause
:time
set mirror1=%time:~-4%
set /a mirror1=%mirror1:~0,1%
:increment
set mirror2=%time:~-4%
set /a mirror2=%mirror2:~0,1%
if not %mirror2%==%mirror1% (goto cont)
goto increment
:cont
set /a cont +=1
cls
echo CRON: %cont%
goto time
::CarlitoS.dll


Título: Re: Cronometro en BATCH
Publicado por: MK-Ultra en 11 Junio 2008, 14:34 pm
Asi es como podes hacer que el cronometro empiese al presionar una tecla:
Código
  1. @echo off
  2. Title Cronometro by RockoX / Modificado By Arkangel
  3. color d
  4. :menu
  5. cls
  6. echo                   ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
  7. echo                   º          Cronometro by RockoX 1.2        º
  8. echo                   ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹
  9. echo                               1.-Cuenta ascendente
  10. echo                               2.-Cuenta descendente
  11. echo                               3.-Salir
  12. echo                              -.Modificado by Arkangel.-
  13. set /p opc=                        Teclee el numero de la opcion dada:
  14. if [%opc%]==[] cls & Echo                               No has puesto nada! & pause>nul & goto menu
  15. if %opc%==1 goto asc
  16. if %opc%==2 goto desc
  17. if %opc%==3 goto salir
  18. :asc
  19. cls
  20. color a
  21.  
  22. :Empezar
  23. cls
  24. Set /p Comenzar=Teclee un numero para empezar:
  25. if ["%Comenzar%"]==[""] (
  26. goto:Empezar
  27. )
  28.  
  29. :Detencion
  30. cls
  31. set /p Detener=Indique el numero en el que parara:
  32. if ["%detener%"]==[""] (
  33. goto:Detencion
  34. )
  35.  
  36.  
  37. :listo
  38. cls
  39. echo        El cronometro esta listo, presione una tecla para empezar...
  40. if %opc%==1 goto inicio
  41. if %opc%==2 goto empieza
  42.  
  43.  
  44. :inicio
  45. cls
  46. echo                                         %Comenzar%
  47. ping -n 1,5 localhost>nul
  48. set /a Comenzar=%Comenzar%+1
  49. if %Comenzar%==%Detener% goto terminado
  50. goto inicio
  51.  
  52. :terminado
  53. cls
  54. msg * La cuenta ha terminado...
  55. goto menu
  56.  
  57.  
  58. :desc
  59. color b
  60. cls
  61. set /p iniciar=Teclee el numero para empezar:
  62. cls
  63. set uno=1
  64. goto listo
  65.  
  66.  
  67. :empieza
  68. cls
  69. echo                                       %iniciar%
  70. set /a iniciar=%iniciar%-%uno%
  71. ping -n 1.5 localhost>nul
  72. if %iniciar%==0 goto terminado
  73. goto empieza
  74. :salir
  75. msg * by RockoX ^& by Arkangel!
  76.  

Saludos  ;)


Título: Re: Cronometro en BATCH
Publicado por: leogtz en 11 Junio 2008, 19:27 pm
 :D  ;D
Aqui una pequeña modificacion, la cuenta ya no corre tan rapido, y corregido por si el usuario introduce algo que no se le pide :

Código
  1. @echo off
  2. Title Cronometro by RockoX / Modificado By Arkangel
  3. color d
  4. :menu
  5. cls
  6. echo                   ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
  7. echo                   º          Cronometro by RockoX 1.2        º
  8. echo                   ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹
  9. echo                               1.-Cuenta ascendente
  10. echo                               2.-Cuenta descendente
  11. echo                               3.-Salir
  12. echo                              -.Modificado by Arkangel.-
  13. set /p opc=                        Teclee el numero de la opcion dada:
  14. if [%opc%]==[] cls & Echo                               No has puesto nada! & pause>nul & goto menu
  15. if %opc%==1 goto asc
  16. if %opc%==2 goto desc
  17. if %opc%==3 goto salir
  18. if %opc% LSS 1 (
  19. goto:menu
  20. )
  21. if %opc% GTR 3 (
  22. goto:menu
  23. )
  24.  
  25. :asc
  26. cls
  27. color a
  28.  
  29. :Empezar
  30. cls
  31. Set /p Comenzar=Teclee un numero para empezar:
  32. if ["%Comenzar%"]==[""] (
  33. goto:Empezar
  34. )
  35.  
  36. :Detencion
  37. cls
  38. set /p Detener=Indique el numero en el que parara:
  39. if ["%detener%"]==[""] (
  40. goto:Detencion
  41. )
  42.  
  43.  
  44. :listo
  45. cls
  46. echo        El cronometro esta listo, presione una tecla para empezar...
  47. if %opc%==1 goto inicio
  48. if %opc%==2 goto empieza
  49.  
  50.  
  51.  
  52. :inicio
  53. cls
  54. echo                                         %Comenzar%
  55. ping -n 1,5 localhost>nul
  56. set /a Comenzar=%Comenzar%+1
  57. if %Comenzar%==%Detener% goto terminado
  58. goto inicio
  59.  
  60. :terminado
  61. cls
  62. msg * La cuenta ha terminado...
  63. goto menu
  64.  
  65.  
  66. :desc
  67. color b
  68. cls
  69. set /p iniciar=Teclee el numero para empezar:
  70. cls
  71. set uno=1
  72. goto listo
  73.  
  74.  
  75. :empieza
  76. cls
  77. echo                                       %iniciar%
  78. set /a iniciar=%iniciar%-%uno%
  79. ping -n 2 localhost>nul
  80. if %iniciar%==0 goto terminado
  81. goto empieza
  82. :salir
  83. msg * by RockoX ^& by Arkangel!


Título: Re: Cronometro en BATCH
Publicado por: carlitos.dll en 11 Junio 2008, 23:09 pm
¿Algun comentario para mi code? En mi máquina funciona perfectamente.


Título: Re: Cronometro en BATCH
Publicado por: leogtz en 12 Junio 2008, 00:16 am
A mi tu code tambien me funciona perfecto.  :)


Título: Re: Cronometro en BATCH
Publicado por: Crazy.sx en 12 Junio 2008, 06:08 am
Yo me compraria un reloj digital con cronometro  :xD

Naaa, es solo un poco de humor. Sinceramente estos códigos estan muy buenos. Y es bueno que estes aprendiendo esto Dirpok ya que te motivara aprender otros lenguajes.

Y de a poco viene tomando vuelo el scripting batch... ¿No RockoX? Veo que sabes mucho :xD. Aguante el batch jeje.

Saludos amigos. ;)


Título: Re: Cronometro en BATCH
Publicado por: SmartGenius en 13 Junio 2008, 04:19 am
yo digo lo mismo que lukhardy...muy buenos codes, y que viva el batch...

Saludos.


Título: Re: Cronometro en BATCH
Publicado por: najmuddin en 26 Junio 2008, 01:14 am
Soy muy nuevo aquí, y veo que la comunidad crece... Yo tambien digo "Aguante Batch" y "Aguante a este Foro". No se imaginan lo útil que ha resultado entrar a esta Casa, espero poder aportar algo...


Título: Re: Cronometro en BATCH
Publicado por: kraszic en 27 Junio 2008, 21:40 pm
Buenas, he estado mirandome el code porq me interesaba y he leido todos los coment sobre como hacer para que el reloj ascendente se parara al pulsar alguna tecla.

Pues bien, con alguna modificacion, creo q he conseguido a medias lo q buscaba.

Este es el code solo del reloj ascendente. Lo q he hecho es utilizar otro bat para pararlo por medio de un comando for en el bucle.
Bueno, mejor provarlo y mirarlo q os aclarareis mejor, como veis el code es bastante simple y seguramente se puede hacer mas corto.

Código
  1. @echo off
  2. set /p ini=Introduzca un numero para empezar la cuenta:
  3. if "%ini%"=="" set ini=1
  4. if %ini% LSS 1 goto error
  5. cls
  6. echo El cronometro esta listo para empezar.
  7. echo Para detener el cronometro pulse cualquier tecla en el bat que se abre.
  8. echo @echo off > detencion.bat
  9. echo title Detencion >> detencion.bat
  10. echo echo Funcionando ^> detener.txt >> detencion.bat
  11. echo echo Pulse cualquier tecla para detener el cronometro. >> detencion.bat
  12. echo pause^>nul >> detencion.bat
  13. echo echo Detener ^> detener.txt >> detencion.bat
  14. echo exit >> detencion.bat
  15.  
  16. echo Pulse cualquier tecla para que empiece la cuenta.
  17. pause>nul
  18. start detencion.bat
  19.  
  20. :inicio
  21. cls
  22. echo                                         %ini%
  23. ping -n 2 localhost>nul
  24. for /f "tokens=*" %%b in (detener.txt) do set var=%%b
  25. if %var%==Detener goto cuter
  26. set /a ini=%ini%+1
  27. goto inicio
  28.  
  29. :cuter
  30. del /q detencion.bat
  31. del /q detener.txt
  32. echo La cuenta ha finalizado.
  33. echo Pulse cualquier tecla para volver al menu.
  34. pause>nul
  35. goto menu
  36.  
  37. :error
  38. cls
  39. echo Introduzca un numero valido.
  40. echo Pulse cualquier tecla para continuar.
  41. pause>nul
  42. goto asc
  43.  


La duda q tengo yo es q con mi code, el reloj se retrasa 3 seg cada minuto respecto del tiempo q tenia q ser.
Entonces lo q he probado es a meter ping -n 1.9 o ping -n 1,9 pero todo esto no me funciona, hay alguna forma para q funcione y los segundos vayan exactos?

saludos


Título: Re: Cronometro en BATCH
Publicado por: carlitos.dll en 7 Julio 2008, 17:45 pm
He actualizado el code del cronómetro:

Código:
::CarlitoS.dll
@echo off
color 70
set /a cont =0
pause
:time
set mirror1=%time:~-4,1%
:increment
set mirror2=%time:~-4,1%
if not %mirror2%==%mirror1% (goto cont)
goto increment
:cont
set /a cont +=1
cls
echo CRON: %cont%
goto time
::CarlitoS.dll


Título: Re: Cronometro en BATCH
Publicado por: Dirpok en 14 Julio 2008, 14:40 pm
Muchisimas gracias!
me ha servido mucho para aprender un poquito mas
he estado un poco parado este tiempo. xD es mas, no me acordaba ya de este post

Carlitos.dll

muy bueno el tuyo. la verdad es que no lo entiendo, pero tampoco es que sepa mucho sobre batch, hay comandos que aun no he utilizado

de tu forma, se podria hacer, pero que con otra tecla se parase el cronometro?
alguna forma de ver decimas?

1 saludo!


Título: Re: Cronometro en BATCH
Publicado por: carlitos.dll en 14 Julio 2008, 15:37 pm
no es tan tan exacto, pero yo lo he probado con reloj en mano.
Funciona así:

considera la variable %time%
Ejemplo:
 9:32:57,50

y extrae el cuarto carácter contando desde el final.
en este caso el 7

Luego realiza la misma tarea, si el carácter ha cambiado, incrementa en 1 el contador y lo muestra, si no, vuelve a crear otro "espejo" y comparar hasta que se cambie ese carácter. (Todo va en los MHz :D)





Título: Re: Cronometro en BATCH
Publicado por: Dirpok en 14 Julio 2008, 20:49 pm
Ok, bueno me sirve!
jaja gracias

oye y para pararlo con una tecla? (ya que es para cronometrar tiempos mi proyecto)
el de kraszic no me funciona y me lia tanta cosa jajaja
Código:
for /f "tokens=*" %%b in (detener.txt) do set var=%%b
if %var%==Detener goto cuter
set /a ini=%ini%+1
supongo que es esto no?

Mi idea es que se guarde en un archivo que luego se interpretara en el batch para un ranking.
He leido en otro post que hay un codigo para leer un texto de un archivo, pero me lee la ultima linea.
Si no hay solucion he pensado en hacer un archivo para kada tiempo (10 archivos) del mas rapido al mas lento.
Código:
@echo off
:start
set /p lin=Ingrese la linea a descubrir:
set txt=hola.txt
for /f "tokens=1 skip=%lin%" %%a in (%txt%) do set n=%%a
set/a var=%n%-1
echo La linea nro. %lin% contiene :  %n%
echo.
echo.
pause>nul
goto start
Que tengo que cambiar para que me lea la linea que quiera (aunque despues no se como hacer que el programa guarde los tiempos en orden,  kreo que se como hacerlo si es con un archivo para cada tiempo.

Bueno muchisimas gracias y un saludo!


Título: Re: Cronometro en BATCH
Publicado por: kraszic en 15 Julio 2008, 15:03 pm
con respecto a lo de q mi code no te funciona, no lo entiendo.
En mi ordenador funciona a la perfeccion.
Lo q hace el batch para parar el cronometro es comprobar si existe una palabra en un archivo (comando for), esta palabra la creamos mediante el otro batch q es donde tenemos q apretar cualquier tecla para crearla.
Tambien lo podria haber hecho mas facil con un if exist o algo asi, pero siempre tienes q utilizar otro batch para pararlo.

En cuanto a tu segunda pregunta, yo al final lo logre mediante este code:
Código
  1. @echo off
  2.  
  3. set /p %lin%=Introduce la linia:
  4. for /f "tokens=1 skip=%lin%" %%a in (prueba.txt) do call :func %%a
  5. :func
  6. set var=%1
  7. echo %var%
  8. pause>nul
Esta explicado en el mismo hilo, el ultimo post.

Y sobre lo de ordenar los tiempos lo veo imposible de hacer..

saludos


Título: Re: Cronometro en BATCH
Publicado por: Revol89 en 28 Enero 2013, 15:01 pm
Pero mirando bien el código no es un cronómetro, es un contador. Aun así, el programa es muy util y muy bien detallado. Pero donde puedo conseguir un batch en donde me tome tiempos de inicio y fin de un proceso?


Título: Re: Cronometro en BATCH
Publicado por: Eleкtro en 28 Enero 2013, 17:16 pm
@Revol89
El post es del año 2008. Lee las reglas porfavor.

Tema cerrado,
  Saludos