Kann man die Laufzeit in Batch Dateien messen?
Ich habe gedacht, dass es mit %time% funktioniert. Hat auch funktioniert, aber jetzt muss ich die Differenz zwischen der Anfangszeit und Endzeit ausrechnen. Aber wie rechne ich diese Zeit aus?(in ms)
3 Antworten
Hier nur ein kleines Beispiel, wie man es lösen könnte. Da man Monate nicht direkt in Tage umrechnen kann (Monate haben unterschiedliche Anzahlen an Tagen), funktioniert folgender Code nicht wenn du ihn in einem Monat startest, aber erst im nächsten beendest. (Sollte aber eigentlich nicht zu oft vorkommen ;)
Zunächst einmal das aktuelle Datum in Millisekunden umrechnen:
:: milliseconds since the start of the current month
set /a msec=0
for /f "tokens=1-3 delims=:" %%H in ("%time%") do (
set /a msec+=%%H * 60 * 60 * 1000
set /a msec+=%%I * 60 * 1000
for /f "tokens=1-2 delims=," %%s in ("%%J") do (
set /a msec+=%%s * 1000
set /a msec+=%%t
)
)
for /f "tokens=1-3 delims=." %%D in ("%date%") do (
set /a msec+=%%D * 24 * 60 * 60 * 1000
)
Diese Umrechnung hab ich jetzt in eine Funktion gepackt, sodass man mit dem Rückgabewert ganz normal rechnen kann:
@echo off&title Laufzeit
call :getCurrentTime
set /a startTime=return
timeout /t 2
call :getCurrentTime
set /a endTime=return
set /a deltaTime=endTime-startTime
echo/deltaTime=%deltaTime%ms
echo/&echo/end_of_file_reached&pause>nul&exit
::method getCurrentTime
::return {Number} milliseconds since the start of the current month
:getCurrentTime
set /a return=0
for /f "tokens=1-3 delims=:" %%H in ("%time%") do (
set /a return+=%%H * 60 * 60 * 1000
set /a return+=%%I * 60 * 1000
for /f "tokens=1-2 delims=," %%s in ("%%J") do (
set /a return+=%%s * 1000
set /a return+=%%t
)
)
for /f "tokens=1-3 delims=." %%D in ("%date%") do (
set /a return+=%%D * 24 * 60 * 60 * 1000
)
exit /b %return%
~Tim
Hab mal wieder die Oktalzahlen in Batch vergessen...
@echo off&title Laufzeit
call :getCurrentTime
set /a startTime=return
timeout /t 2
call :getCurrentTime
set /a endTime=return
set /a deltaTime=endTime-startTime
echo/deltaTime=%deltaTime%ms
echo/&echo/end_of_file_reached&pause>nul&exit
::method getCurrentTime
::return {Number} milliseconds since the start of the current month
:getCurrentTime
set /a return=0
setlocal enableDelayedExpansion
for /f "tokens=1-3 delims=:" %%H in ("%time%") do (
cmd/k"exit/b %%H"&set/a return+=!errorlevel!*60*60*1000
cmd/k"exit/b %%I"&set/a return+=!errorlevel! *60*1000
for /f "tokens=1-2 delims=," %%s in ("%%J") do (
cmd/k"exit/b %%s"&set/a return+=!errorlevel! *1000
cmd/k"exit/b %%t"&set/a return+=!errorlevel!
)
)
for /f "tokens=1-3 delims=." %%D in ("%date%") do (
cmd/k"exit/b %%D"&set/a return+=!errorlevel!*24*60*60*1000
)
endlocal&set/a return=%return%
exit /b %return%
Vielleicht hilft dir das: https://www.administrator.de/forum/laufzeit-dauer-batch-ermitteln-79909.html ?
startzeit = %time%
....
....
....
endzeit = %time%
Laufzeit = endzeit - startzeit
funktioniert bei mir nicht, aber danke für die schnelle Rückmeldung
Die Frage war ja nicht nach einem Konzept zur Berechnung der Laufzeit, sondern konkret die Differenz zwischen Endzeit und Anfangszeit zu bekommen.