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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Contador (cuenta atrás)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Contador (cuenta atrás)  (Leído 4,299 veces)
BatchianoISpyxolo

Desconectado Desconectado

Mensajes: 166


Ver Perfil
Contador (cuenta atrás)
« en: 7 Abril 2012, 09:40 am »

Pues he implementado una cuenta atrás en Batch... segurísimamente ya esté hecho... pero me apetecía pensar como hacerlo... opiniones... mejoras... aplicaciones para la cuenta atrás... ideas... críticas constructivas... todo bienvenido :P

Operadores lógicos...

Código
  1. ::Cuenta atrás
  2. ::Batchiano
  3. @echo off
  4. setlocal enabledelayedexpansion
  5. :menu
  6. set /p h="Horas: "
  7. set /p m="Minutos: "
  8. set /p s="Segundos: "
  9. for %%z in (h,m,s) do if not defined %%z (
  10. call :formato
  11. )
  12. if %h% GEQ 0 (
  13. if %m% GEQ 0 (
  14. if %m% LEQ 59 (
  15. if %s% GEQ 0 (
  16. if %s% LEQ 59 (
  17. call :contador
  18. ) else (
  19. call :formato
  20. )
  21. ) else (
  22. call :fomato
  23. )
  24. ) else (
  25. call :formato
  26. )
  27. ) else (
  28. call :formato
  29. )
  30. ) else (
  31. call :formato
  32. )
  33. goto :eof
  34.  
  35. :contador
  36. cls
  37. if %h% GEQ 0 (
  38. if %m% GEQ 0 (
  39. if %s% GEQ 0 (
  40. for /l %%a in (!h!,-1,0) do (
  41. for /l %%b in (!m!,-1,0) do (
  42. for /l %%c in (!s!,-1,0) do (
  43. echo Contador: %%a:%%b:%%c
  44. ping localhost -n 2 > nul
  45. cls
  46. )
  47. set s=59
  48. )
  49. set m=59
  50. )
  51. )
  52. )
  53. )
  54. goto :eof
  55.  
  56. :formato
  57. echo Formato incorrecto. Vuelva a intentarlo
  58. pause>nul & cls & call :menu
  59.  


« Última modificación: 7 Abril 2012, 10:19 am por Batchiano » En línea

Puede que desees aprender a programar desde 0: www.espascal.es
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.878



Ver Perfil
Re: Contador (cuenta atrás)
« Respuesta #1 en: 7 Abril 2012, 13:07 pm »

críticas constructivas...
mejoras...

Si quieres mejorar el code puedes hacer de el una función (Además de simplificarlo). Aqui tienes un ejemplo:

Código
  1. :: Contador.bat
  2. :: By Elektro H@cker
  3. :: Visita Foro.ElHacker.Net
  4.  
  5. @Echo OFF
  6. Setlocal EnableDelayedexpansion
  7.  
  8. :Menu
  9. IF "%~1" EQU "" (
  10. Set /P "H=Horas: " && Set /P "M=Minutos: " && Set /P "S=Segundos: "
  11. Echo !H!!M!!S! | Findstr /I "[A-Z]" >NUL
  12.        IF !Errorlevel! EQU 0 (Goto :ERROR)
  13. ) Else (
  14. For /F "Tokens=1-3 delims=:" %%a in ('Echo %~1') Do (Set /A H=%%a, M=%%b, S=%%c) || (Goto :ERROR)
  15. )
  16.  
  17. :TimeLoop
  18. Cls
  19. For /F %%? in ('Echo %h%:%m%:%s%') Do (
  20. IF !H! LSS 0 (Goto :End)
  21. IF !S! EQU 0 (Set /A S=60, M-=1)
  22. IF !M! LSS 0 (Set /A H-=1, M=59, S=60)
  23. Set /A S-=1
  24. Echo Contador: %h%:%m%:%s%
  25. Ping -n 2 Localhost 1>Nul
  26. Goto :TimeLoop
  27. )
  28.  
  29. :Error
  30. Echo: Formato incorrecto. Vuelva a intentarlo...
  31. Exit /B 1
  32.  
  33. :End
  34. Echo Fin de la cuenta atras.
  35. Exit /B 0

Citar
Modo de empleo:

Contador.bat [Horas]:[Minutos]:[Segundos]
  • Ejemplo: Contador 1:0:59

Salu2.


« Última modificación: 7 Abril 2012, 13:12 pm por EleKtro H@cker » En línea



ELVJop

Desconectado Desconectado

Mensajes: 132



Ver Perfil
Re: Contador (cuenta atrás)
« Respuesta #2 en: 7 Abril 2012, 21:23 pm »

para sacarle el máximo rendimiento al code lo dejaría así:

Código:
 
@Echo OFF
Setlocal EnableDelayedexpansion
 
:Menu
IF "%~1" EQU "" (
Set /P H=Horas:
Echo !H! | Findstr /I "[A-Z]" >NUL
IF !Errorlevel! EQU 0 (Goto :ERROR)
Set /P M=Minutos:
Echo !M! | Findstr /I "[A-Z]" >NUL
IF !Errorlevel! EQU 0 (Goto :ERROR)
Set /P S=Segundos:
) Else (
For /F "Tokens=1-3 delims=:" %%a in ('Echo %~1') Do (Set /A H=%%a, M=%%b, S=%%c) || (Goto :ERROR)
)
 
:TimeLoop
Cls
For /F %%? in ('Echo %h%:%m%:%s%') Do (
IF !H! LSS 0 (Goto :End)
IF !S! EQU 0 (Set /A S=60, M-=1)
IF !M! LSS 0 (Set /A H-=1, M=59, S=60)
Set /A S-=1
Echo Contador: %h%:%m%:%s%
Ping -n 2 Localhost 1>Nul
Goto :TimeLoop
)
 
:End
Echo Fin de la cuenta atras.
echo.
echo Desea volver a iniciar el contador?
echo.
echo Teclee el numero correspondiente y pulse Enter
echo.
echo 1. Si
echo 2. No
set /P pregunta=
if %pregunta%==1 goto :menu2
if %pregunta%==2 goto :salir
IF !Errorlevel! EQU 1 (Goto :ERROR2)

:Error
Echo: Incorrecto vuelva a probar...
goto :error2
 
:Error2
cls
echo Desea volver a iniciar el contador?
echo.
echo Teclee el numero correspondiente y pulse Enter
echo.
echo 1. Si
echo 2. No
set /P pregunta=
if %pregunta%==1 goto :menu2
if %pregunta%==2 goto :salir
IF !Errorlevel! EQU 1 (Goto :ERROR2)

:salir
exit

PD: Electro hacker no revisaste tu propio code no dega leer lo echo del error y del end
« Última modificación: 8 Abril 2012, 22:08 pm por ELVJop » En línea

El dia 3 de mayo esta cuenta sera borrada.
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.878



Ver Perfil
Re: Contador (cuenta atrás)
« Respuesta #3 en: 8 Abril 2012, 18:51 pm »

No hombre, Si que lo revisé, Se cierra porque lo abres manualmente el Bat. Está pensado para llamar al Bat desde otro Bat o usandolo como expliqué.
Fijate en los códigos de salida del exit.



Esta parte de tu code se puede simplificar un poco más:
Código
  1. :End
  2. Echo Fin de la cuenta atras.
  3. echo Desea volver a iniciar el contador?
  4. echo Teclee el numero correspondiente y pulse Enter
  5. echo 1. Si
  6. echo 2. No
  7. set /P pregunta=
  8. if %pregunta%==1 goto :menu2
  9. if %pregunta%==2 goto :salir
  10. IF !Errorlevel! EQU 1 (Goto :ERROR2)
  11.  
  12. :Error2
  13. cls
  14. echo Desea volver a iniciar el contador?
  15. echo Teclee el numero correspondiente y pulse Enter
  16. echo 1. Si
  17. echo 2. No
  18. set /P pregunta=
  19. if %pregunta%==1 goto :menu2
  20. if %pregunta%==2 goto :salir
  21. IF !Errorlevel! EQU 1 (Goto :ERROR2)
  22.  


Código
  1. Choice /M "Desea volver a iniciar el contador?"
  2. If %errorlevel% EQU 1 (goto :menu2) ELSE (goto :salir)

Salu2!
« Última modificación: 8 Abril 2012, 18:54 pm por EleKtro H@cker » En línea



Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
¿Cuenta atras en php y MySQL?
PHP
Luisango 0 3,967 Último mensaje 27 Octubre 2006, 20:02 pm
por Luisango
BAT: Poner una cuenta atras en el bat
Scripting
filer 1 7,200 Último mensaje 13 Diciembre 2008, 21:53 pm
por leogtz
Cuenta atras
Desarrollo Web
pingu489 1 2,811 Último mensaje 17 Julio 2020, 23:35 pm
por C4C3
Cuenta atras con... js ?
Desarrollo Web
pingu489 2 3,026 Último mensaje 4 Junio 2020, 04:18 am
por pingu489
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines