26 Oct
Zeit messen ist mit Batch kein Problem und oftmals eine nette Spielerei.
Code:
set /a timerstart=((1%time:~0,2%-100)*60*60)+((1%time:~3,2%-100)*60)+(1%time:~6,2%-100) REM packing zip archive %wd%\7za.exe a -bd -ssw "%job-ziel%.zip" "%job-quelle%" > nul set /a timerstop=((1%time:~0,2%-100)*60*60)+((1%time:~3,2%-100)*60)+(1%time:~6,2%-100) set /a timeseks=(%timerstop%-%timerstart%) set /a timemins=(%timerstop%-%timerstart%)/60 echo Sekunden: %timeseks% -- Minuten: %timemins%
Erläuterung:
Also, timerstart nimmt die aktuelle Uhrzeit und rechnet aus, wieviele Sekunden seit 00:00 Uhr verstrichen sind.
Der 2. Timer, timerstop, rechner ebenfalls die Sekunden seit 00 Uhr aus. Zieht man diese jetzt von der Startzeit ab so bleibt die Anzahl in Sekunden übrig, die zwischen den Timern verstrichen ist.
Das bedeutet natürlich auch, dass eine Zeitberechnung von einem Tag in den nächsten nicht funktioniert. Start und Stop müssen zwischen 00 Uhr und 23:59 Uhr des selben Tages liegen.
Details zu dieser Art der Zeitmessung:
Diese Berechnung ist bereits eine optimierte Variante. Grundsätzlich würde in 80% der Fälle auch
set /a timerstart=((%time:~0,2%)*60*60)+((%time:~3,2%)*60)+(%time:~6,2%)
funktionieren; diese Variante findet man auch überall im Netz.
Ich beobachtete jedoch Probleme bei Zeitberechnungen, wenn mit den Zahlen “08″ und “09″ hantiert wurde.
Also beispielsweise um 16:08:09 Uhr wird ein Timer aktiviert. Dann rechnet dieser eigentlich
((16)*60*60)+((08)*60)+(09)
Batch kommt damit aber nicht klar, da er dezimale Zahlen und oktale Zahlen durcheinander bringt. Um trotzdem mit Uhrzeiten mit “08″ und “09″ rechnung zu können habe ich die Zeile ergänzt:
set /a timerstart=((1%time:~0,2%-100)*60*60)+((1%time:~3,2%-100)*60)+(1%time:~6,2%-100)
Nun wird also bei 16:08:09 gerechnet:
((116-100)*60*60)+((108-100)*60)+(109-100)
Funktioniert
Hat dir dieser Post gefallen? Dann schau noch unter den "Ähnlichen Artikeln" nach und abonniere meinen RSS Feed.Momentan sind noch keine Einstellungen möglich.
Es wird bald möglich sein, auf Wunsch html7bar komplett zu deaktivieren.
4 Responses for "Zeitmessung mit Batch"
Hallo!
Bei mir funktioniert die Variante
set /a timerstart=((%time:~0,2%-100)*60*60)+((%time:~3,2%-100)*60)+(%time:~6,2%-100)
denn bei %time:~0,2% wird immer eine Zahl ohne führende Null ausgegeben. Also wenn wer Probleme hat, einfach den Befehl mit “echo” davor mal eingeben und schauen, wie bei ihm die Zahlen zurückgegeben werden.
Also wenn ich deinen Code
set /a timerstart=((%time:~0,2%-100)*60*60)+((%time:~3,2%-100)*60)+(%time:~6,2%-100)ausführe dann erhalte ich
-329227.Ich denke mal du hast vergessen die
-100überall zu entfernen.Und selbst wenn du die
-100überall entfernst und der Code dannset /a a=((%time:~0,2%)*60*60)+((%time:~3,2%)*60)+(%time:~6,2%)lauetet wirst du Probleme bekommen sobald einer der Zeitvariablen “08″ oder “09″ annimmt, so wie oben beschrieben.
Also die Zeit 16:08:09 Uhr würde bei dieser Codezeile (ohne die 100er Ergänzungen) folgendes generieren:
(Screenshot)
Warum das so ist habe ich ja oben beschrieben. Und die Lösung dafür ist halt die Ergänzung mit den 100er Rechenschritten.
Leave a reply