[BATCH] Problema Script Cuenta Regresiva

Iniciado por XXLuigiMario, 7 Junio 2012, 22:30 PM

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

XXLuigiMario

Hola amigos de elhacker.net, soy nuevo aquí, y vengo con un problema, tengo hecho un script para una cuenta regresiva en batch pero se queda en el numero "9".

El script es este:

@echo off
title Cuenta Regresiva
rem Made by XXLuigiMario
:menu
set /p min=Escribe cuantos minutos durara la cuenta:
if %min% LSS 10 (goto minuto)
:minuto
set min=0%min%
goto segundo
:segundo
set seg=00
goto cuenta
:cuenta
cls
echo Tiempo Restante:
echo.
echo %min% min. %seg% seg.
call :restarsegundo
:restarsegundo
if %seg%==00 (call :restarminuto)
if %seg% LSS 9 (call :restarsegundocontinuar)
if %seg%==10 (call :restarsegundo2)
ping -n 2 0.0.0.0>nul
set /a seg=%seg% - 1
goto cuenta
:restarsegundocontinuar
ping -n 2 0.0.0.0>nul
set /a seg=%seg% - 1
goto cuenta
:restarsegundo2
ping -n 2 0.0.0.0>nul
set /a seg=%seg% - 1
set seg=0%seg%
goto cuenta
:restarminuto
if %min%==00 (goto cuentaacabada)
if %min% LSS 11 (call :restarminuto2)
ping -n 2 0.0.0.0>nul
set /a min=%min% - 1
set /a seg=%seg% + 59
goto cuenta
:restarminuto2
ping -n 2 0.0.0.0>nul
set /a min=%min% - 1
set min=0%min%
set /a seg=%seg% + 59
goto cuenta
:cuentaacabada
echo Cuenta regresiva terminada!
pause >nul
goto menu


Qualquier ayuda se agradece  :D

BatchianoISpyxolo

Se puede simplificar el code... pero ahí está mi intento... Deberías identar tu code...

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

XXLuigiMario

Muchas gracias Batchiano :D, pero aun tengo un problema, yo quiero que si por ejemplo faltan cinco minutos, se vea asi: "00:05:00" no asi "0:5:0".
Lo he intentado con set m=0%m%, pero no me funciona :(
Alguien sabe como hacerlo?

Eleкtro

Hola,

Aqui tienes mi versión de cosecha propia xD

PD: Funciona especificando minutos, Como se supone que querías... Y usa el formato que quieres (00:00:00).

Saludos.






Código (dos) [Seleccionar]
@echo off
Title Cuenta Regresiva

REM By Elektro H@cker
REM Visita: WWW.ElHacker.Net

Setlocal enabledelayedexpansion

:MENU
set /p TIMER=Escribe cuantos minutos durara la cuenta ^>^>
If not defined TIMER (Goto :Menu)
Echo "%TIMER%"| FINDSTR /I "[A-Z]" >NUL && Goto :Menu || (set /A total_sec=%TIMER%*60)
If %total_sec% LSS 3600 (Set /A Horas=0, Minutos=%TIMER%, Segundos=0& Goto :Countdown) ELSE (Set /A Timer+=60)
Set /A Horas=%Timer%-60 & Set /A Horas=!Horas!/60
Set /A MINUTOS=%Timer%-60 & For /L %%X in (1,1,!HORAS!) Do (Set /A MINUTOS-=60)
Set /A Segundos=0

:Countdown
CLS
For /L %%H in (%HORAS%,-1,0) Do (
For /L %%M in (!MINUTOS!,-1,0) Do (
For /L %%S in (!SEGUNDOS!,-1,0) Do (
Echo %%H| FINDSTR "^[0-9][0-9]$" >NUL && SET "HO=%%H" || (Set HO=0%%H)
Echo %%M| FINDSTR "^[0-9][0-9]$" >NUL && SET "MI=%%M" || (Set MI=0%%M)
Echo %%S| FINDSTR "^[0-9][0-9]$" >NUL && SET "SE=%%S" || (Set SE=0%%S)
Echo !HO!:!MI!:!SE!
Ping -n 2 localhost >NUL
CLS
)
If !SE!==00 (Set /A SEGUNDOS=59)
)
If !MI!==00 (Set /A MINUTOS=59)
)

:FIN
Echo Fin de la cuenta atras.
Pause








XXLuigiMario

EleKtro H@cker, gracias por ayudarme con el script, me ha funcionado perfecto :D!

987123564

Hola, he probado el código de @Elektro y si pongo 60 minutos empieza en 48 minutos. Yo no se batch así que no les puedo aconsejar ni corregir nada :-(

Eleкtro

#6
Cita de: 987123564 en 14 Agosto 2016, 23:25 PMHola, he probado el código de @Elektro y si pongo 60 minutos empieza en 48 minutos. Yo no se batch así que no les puedo aconsejar ni corregir nada :-(

El código funciona correctamente al especificar 60 minutos:


Es posible que estés haciendo algo mal, ¿modificaste el código original de alguna manera?

Saludos!








BALTA00

Cita de: Eleкtro en 11 Junio 2012, 04:36 AM
Hola,

Aqui tienes mi versión de cosecha propia xD

PD: Funciona especificando minutos, Como se supone que querías... Y usa el formato que quieres (00:00:00).

Saludos.






Código (dos) [Seleccionar]
@echo off
Title Cuenta Regresiva

REM By Elektro H@cker
REM Visita: WWW.ElHacker.Net

Setlocal enabledelayedexpansion

:MENU
set /p TIMER=Escribe cuantos minutos durara la cuenta ^>^>
If not defined TIMER (Goto :Menu)
Echo "%TIMER%"| FINDSTR /I "[A-Z]" >NUL && Goto :Menu || (set /A total_sec=%TIMER%*60)
If %total_sec% LSS 3600 (Set /A Horas=0, Minutos=%TIMER%, Segundos=0& Goto :Countdown) ELSE (Set /A Timer+=60)
Set /A Horas=%Timer%-60 & Set /A Horas=!Horas!/60
Set /A MINUTOS=%Timer%-60 & For /L %%X in (1,1,!HORAS!) Do (Set /A MINUTOS-=60)
Set /A Segundos=0

:Countdown
CLS
For /L %%H in (%HORAS%,-1,0) Do (
For /L %%M in (!MINUTOS!,-1,0) Do (
For /L %%S in (!SEGUNDOS!,-1,0) Do (
Echo %%H| FINDSTR "^[0-9][0-9]$" >NUL && SET "HO=%%H" || (Set HO=0%%H)
Echo %%M| FINDSTR "^[0-9][0-9]$" >NUL && SET "MI=%%M" || (Set MI=0%%M)
Echo %%S| FINDSTR "^[0-9][0-9]$" >NUL && SET "SE=%%S" || (Set SE=0%%S)
Echo !HO!:!MI!:!SE!
Ping -n 2 localhost >NUL
CLS
)
If !SE!==00 (Set /A SEGUNDOS=59)
)
If !MI!==00 (Set /A MINUTOS=59)
)

:FIN
Echo Fin de la cuenta atras.
Pause


¿Qué se necesitaría agregar a ese código para que el usuario presionando una tecla interrumpa el conteo y pase a la siguiente línea?