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