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
Se puede simplificar el code... pero ahí está mi intento... Deberías identar tu code...
::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
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?
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.
(http://img189.imageshack.us/img189/8767/prtscrcapturepr.jpg)
(http://img32.imageshack.us/img32/6374/prtscrcapture2b.jpg)
@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
EleKtro H@cker, gracias por ayudarme con el script, me ha funcionado perfecto :D!
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 :-(
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:
(http://i.imgur.com/Kn9t1Tf.gif)
Es posible que estés haciendo algo mal, ¿modificaste el código original de alguna manera?
Saludos!
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.
(http://img189.imageshack.us/img189/8767/prtscrcapturepr.jpg)
(http://img32.imageshack.us/img32/6374/prtscrcapture2b.jpg)
@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?