Contador (cuenta atrás)

Iniciado por BatchianoISpyxolo, 7 Abril 2012, 09:40 AM

0 Miembros y 1 Visitante están viendo este tema.

BatchianoISpyxolo

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

::Cuenta atrás
::Batchiano
@echo off
setlocal enabledelayedexpansion
:menu
set /p h="Horas: "
set /p m="Minutos: "
set /p s="Segundos: "
for %%z in (h,m,s) do if not defined %%z (
call :formato
)
if %h% GEQ 0 (
if %m% GEQ 0 (
if %m% LEQ 59 (
if %s% GEQ 0 (
if %s% LEQ 59 (
call :contador
) else (
call :formato
)
) else (
call :fomato
)
) else (
call :formato
)
) else (
call :formato
)
) else (
call :formato
)
goto :eof

:contador
cls
if %h% GEQ 0 (
if %m% GEQ 0 (
if %s% GEQ 0 (
for /l %%a in (!h!,-1,0) do (
for /l %%b in (!m!,-1,0) do (
for /l %%c in (!s!,-1,0) do (
echo Contador: %%a:%%b:%%c
ping localhost -n 2 > nul
cls
)
set s=59
)
set m=59
)
)
)
)
goto :eof

:formato
echo Formato incorrecto. Vuelva a intentarlo
pause>nul & cls & call :menu
Puede que desees aprender a programar desde 0: www.espascal.es

Eleкtro

#1
Cita de: Batchiano en  7 Abril 2012, 09:40 AM
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 (dos) [Seleccionar]

:: Contador.bat
:: By Elektro H@cker
:: Visita Foro.ElHacker.Net

@Echo OFF
Setlocal EnableDelayedexpansion

:Menu
IF "%~1" EQU "" (
Set /P "H=Horas: " && Set /P "M=Minutos: " && Set /P "S=Segundos: "
Echo !H!!M!!S! | Findstr /I "[A-Z]" >NUL
       IF !Errorlevel! EQU 0 (Goto :ERROR)
) 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
)

:Error
Echo: Formato incorrecto. Vuelva a intentarlo...
Exit /B 1

:End
Echo Fin de la cuenta atras.
Exit /B 0


CitarModo de empleo:

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








ELVJop

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


@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
El dia 3 de mayo esta cuenta sera borrada.

Eleкtro

#3
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 (DOS) [Seleccionar]

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

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



Código (dos) [Seleccionar]

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


Salu2!