Test Foro de elhacker.net SMF 2.1

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 (dos) [Seleccionar]
@echo off
Title Cronometro by RockoX
color d
:menu
cls
echo.
echo                   ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
echo                   º          Cronometro by RockoX 1.2        º
echo                   ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹
echo.
echo.
echo                               1.-Cuenta ascendente
echo                               2.-Cuenta descendente
echo                               3.-Salir
echo.
echo.
echo.
set /p opc=                        Teclee el numero de la opcion dada:
if [%opc%]==[] cls & Echo                               No has puesto nada! & pause>nul & goto menu
if %opc%==1 goto asc
if %opc%==2 goto desc
if %opc%==3 goto salir
:asc
cls
color a

:Empezar
cls
Set /p Comenzar=Teclee un numero para empezar:
if ["%Comenzar%"]==[""] (
goto:Empezar
)
echo.
echo.

:Detencion
cls
set /p Detener=Indique el numero en el que parara:
if ["%detener%"]==[""] (
goto:Detencion
)

:inicio
cls
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo                                         %Comenzar%
ping -n 1,5 localhost>nul
set /a Comenzar=%Comenzar%+1
if %Comenzar%==%Detener% goto terminado
goto inicio
:terminado
cls
msg * La cuenta ha terminado...
pause > nul
goto menu
:desc
color b
cls
set /p iniciar=Teclee el numero para empezar:
cls
set uno=1
:empieza
cls
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo                                       %iniciar%
set /a iniciar=%iniciar%-%uno%
ping -n 1.5 localhost>nul
if %iniciar%==0 goto terminado
goto empieza
:salir
msg * by RockoX!
exit



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 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.


::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 (dos) [Seleccionar]

@echo off
Title Cronometro by RockoX / Modificado By Arkangel
color d
:menu
cls
echo.
echo                   ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
echo                   º          Cronometro by RockoX 1.2        º
echo                   ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹
echo.
echo.
echo                               1.-Cuenta ascendente
echo                               2.-Cuenta descendente
echo                               3.-Salir
echo.
echo.
echo.
echo                              -.Modificado by Arkangel.-
echo.
echo.
set /p opc=                        Teclee el numero de la opcion dada:
if [%opc%]==[] cls & Echo                               No has puesto nada! & pause>nul & goto menu
if %opc%==1 goto asc
if %opc%==2 goto desc
if %opc%==3 goto salir
:asc
cls
color a

:Empezar
cls
Set /p Comenzar=Teclee un numero para empezar:
if ["%Comenzar%"]==[""] (
goto:Empezar
)
echo.
echo.

:Detencion
cls
set /p Detener=Indique el numero en el que parara:
if ["%detener%"]==[""] (
goto:Detencion
)


:listo
cls
echo.
echo.
echo.
echo        El cronometro esta listo, presione una tecla para empezar...
echo.
echo.
echo.
pause > nul
if %opc%==1 goto inicio
if %opc%==2 goto empieza


:inicio
cls
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo                                         %Comenzar%
ping -n 1,5 localhost>nul
set /a Comenzar=%Comenzar%+1
if %Comenzar%==%Detener% goto terminado
goto inicio

:terminado
cls
msg * La cuenta ha terminado...
pause > nul
goto menu


:desc
color b
cls
set /p iniciar=Teclee el numero para empezar:
cls
set uno=1
goto listo


:empieza
cls
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo                                       %iniciar%
set /a iniciar=%iniciar%-%uno%
ping -n 1.5 localhost>nul
if %iniciar%==0 goto terminado
goto empieza
:salir
msg * by RockoX ^& by Arkangel!
exit


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 (dos) [Seleccionar]
@echo off
Title Cronometro by RockoX / Modificado By Arkangel
color d
:menu
cls
echo.
echo                   ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
echo                   º          Cronometro by RockoX 1.2        º
echo                   ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹
echo.
echo.
echo                               1.-Cuenta ascendente
echo                               2.-Cuenta descendente
echo                               3.-Salir
echo.
echo.
echo.
echo                              -.Modificado by Arkangel.-
echo.
echo.
set /p opc=                        Teclee el numero de la opcion dada:
if [%opc%]==[] cls & Echo                               No has puesto nada! & pause>nul & goto menu
if %opc%==1 goto asc
if %opc%==2 goto desc
if %opc%==3 goto salir
if %opc% LSS 1 (
goto:menu
)
if %opc% GTR 3 (
goto:menu
)

:asc
cls
color a

:Empezar
cls
Set /p Comenzar=Teclee un numero para empezar:
if ["%Comenzar%"]==[""] (
goto:Empezar
)
echo.
echo.

:Detencion
cls
set /p Detener=Indique el numero en el que parara:
if ["%detener%"]==[""] (
goto:Detencion
)


:listo
cls
echo.
echo.
echo.
echo        El cronometro esta listo, presione una tecla para empezar...
echo.
echo.
echo.
pause > nul
if %opc%==1 goto inicio
if %opc%==2 goto empieza



:inicio
cls
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo                                         %Comenzar%
ping -n 1,5 localhost>nul
set /a Comenzar=%Comenzar%+1
if %Comenzar%==%Detener% goto terminado
goto inicio

:terminado
cls
msg * La cuenta ha terminado...
pause > nul
goto menu


:desc
color b
cls
set /p iniciar=Teclee el numero para empezar:
cls
set uno=1
goto listo


:empieza
cls
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo                                       %iniciar%
set /a iniciar=%iniciar%-%uno%
ping -n 2 localhost>nul
if %iniciar%==0 goto terminado
goto empieza
:salir
msg * by RockoX ^& by Arkangel!
exit
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 (dos) [Seleccionar]

@echo off
set /p ini=Introduzca un numero para empezar la cuenta:
if "%ini%"=="" set ini=1
if %ini% LSS 1 goto error
cls
echo El cronometro esta listo para empezar.
echo Para detener el cronometro pulse cualquier tecla en el bat que se abre.
echo.
echo.
echo @echo off > detencion.bat
echo title Detencion >> detencion.bat
echo echo Funcionando ^> detener.txt >> detencion.bat
echo echo Pulse cualquier tecla para detener el cronometro. >> detencion.bat
echo pause^>nul >> detencion.bat
echo echo Detener ^> detener.txt >> detencion.bat
echo exit >> detencion.bat

echo Pulse cualquier tecla para que empiece la cuenta.
pause>nul
start detencion.bat

:inicio
cls
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo                                         %ini%
ping -n 2 localhost>nul
for /f "tokens=*" %%b in (detener.txt) do set var=%%b
if %var%==Detener goto cuter
set /a ini=%ini%+1
goto inicio

:cuter
del /q detencion.bat
del /q detener.txt
echo.
echo.
echo.
echo La cuenta ha finalizado.
echo Pulse cualquier tecla para volver al menu.
pause>nul
goto menu

:error
cls
echo Introduzca un numero valido.
echo.
echo.
echo Pulse cualquier tecla para continuar.
pause>nul
goto asc



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:


::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

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.

@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 (dos) [Seleccionar]
@echo off

set /p %lin%=Introduce la linia:
for /f "tokens=1 skip=%lin%" %%a in (prueba.txt) do call :func %%a
:func
set var=%1
echo %var%
pause>nul
exit

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