"Schlank und effizienter" TIMER mit regionalem Format, 24h- und gemischter Eingabeunterstützung
Anpassung des Substitutionsmethodenkörpers von Aacinis, kein IF, nur ein FOR (meine regionale Anpassung)
1: Datei timer.bat, die sich irgendwo im %PATH% oder im aktuellen Verzeichnis befindet
@echo off & rem :AveYo: kompakte Timerfunktion mit regionalem Format, 24 Stunden und gemischter Eingabeunterstützung
if not defined timer_set (if not "%~1"=="" (call set "timer_set=%~1") else set "timer_set=%TIME: =0%") & goto :eof
(if not "%~1"=="" (call set "timer_end=%~1") else set "timer_end=%TIME: =0%") & setlocal EnableDelayedExpansion
for /f "tokens=1-6 delims=0123456789" %%i in ("%timer_end%%timer_set%") do (set CE=%%i&set DE=%%k&set CS=%%l&set DS=%%n)
set "TE=!timer_end:%DE%=%%100)*100+1!" & set "TS=!timer_set:%DS%=%%100)*100+1!"
set/A "T=((((10!TE:%CE%=%%100)*60+1!%%100)-((((10!TS:%CS%=%%100)*60+1!%%100)" & set/A "T=!T:-=8640000-!"
set/A "cc=T%%100+100,T/=100,ss=T%%60+100,T/=60,mm=T%%60+100,hh=T/60+100"
set "value=!hh:~1!%CE%!mm:~1!%CE%!ss:~1!%DE%!cc:~1!" & if "%~2"=="" echo/!value!
endlocal & set "timer_end=%value%" & set "timer_set=" & goto :eof
Verwendung:
timer & echo start_cmds & timeout /t 3 & echo end_cmds & timer
timer & timer "23:23:23,00"
timer "23:23:23,00" & timer
timer "13.23.23,00" & timer "03:03:03.00"
timer & timer "0:00:00.00" no & cmd /v:on /c echo until midnight=!timer_end!
Die Eingabe kann jetzt gemischt werden, für unwahrscheinliche, aber mögliche Änderungen des Zeitformats während der Ausführung
2: Funktion :timer im Batch-Skript gebündelt (Beispielverwendung unten):
@echo off
set "TIMER=call :timer" & rem kurzes Makro
echo.
echo BEISPIEL:
call :timer
timeout /t 3 >nul & rem Jeglicher Prozess hier..
call :timer
echo.
echo KURZES MAKRO:
%TIMER% & timeout /t 1 & %TIMER%
echo.
echo TESTEINGABE:
set "start=22:04:04.58"
set "end=04.22.44,22"
echo %start% ~ start & echo %end% ~ end
call :timer "%start%"
call :timer "%end%"
echo.
%TIMER% & %TIMER% "00:00:00.00" no
echo BIS MITTERNACHT: %timer_end%
echo.
pause
exit /b
:: um es zu testen, beide obige und untere Codeabschnitte kopieren und einfügen
rem :AveYo: kompakte Timerfunktion mit regionalem Format, 24 Stunden und gemischter Eingabeunterstützung
:timer Nutzung " call :timer [Eingabe - optional] [no - optional]" :i Ergebnis wird beim zweiten Aufruf angezeigt, in timer_end gespeichert
if not defined timer_set (if not "%~1"=="" (call set "timer_set=%~1") else set "timer_set=%TIME: =0%") & goto :eof
(if not "%~1"=="" (call set "timer_end=%~1") else set "timer_end=%TIME: =0%") & setlocal EnableDelayedExpansion
for /f "tokens=1-6 delims=0123456789" %%i in ("%timer_end%%timer_set%") do (set CE=%%i&set DE=%%k&set CS=%%l&set DS=%%n)
set "TE=!timer_end:%DE%=%%100)*100+1!" & set "TS=!timer_set:%DS%=%%100)*100+1!"
set/A "T=((((10!TE:%CE%=%%100)*60+1!%%100)-((((10!TS:%CS%=%%100)*60+1!%%100)" & set/A "T=!T:-=8640000-!"
set/A "cc=T%%100+100,T/=100,ss=T%%60+100,T/=60,mm=T%%60+100,hh=T/60+100"
set "value=!hh:~1!%CE%!mm:~1!%CE%!ss:~1!%DE%!cc:~1!" & if "%~2"=="" echo/!value!
endlocal & set "timer_end=%value%" & set "timer_set=" & goto :eof
CE, DE und CS, DS stehen für Doppelpunkt-Ende, Punktende und Doppelpunkt festlegen, Punkt festlegen - verwendet für gemischte Formatunterstützung