Kann man die Laufzeit in Batch Dateien messen?

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

Woher ich das weiß:eigene Erfahrung

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%

0

startzeit = %time%

....

....

....

endzeit = %time%

Laufzeit = endzeit - startzeit

funktioniert bei mir nicht, aber danke für die schnelle Rückmeldung

0

Die Frage war ja nicht nach einem Konzept zur Berechnung der Laufzeit, sondern konkret die Differenz zwischen Endzeit und Anfangszeit zu bekommen.

0