Zeitdifferenz ermitteln und ausgeben per Batch
Hi zusammen,
beschäftige mich seit kurzem intensiver mit Batch.
Nun stehe ich vor eine naja nicht gerade problem, aber mich Quält eine frage und zwar
geht dieser Snippsel auch einfacher auszuwerten ?
Ich habe ein Backupscript geschrieben läuft auch einwandfrei.
Nun erstelle ich mir dementsprechend auch ein Logfile. Aber wenn die Datensicherung durch ist möchte ich im Logfile
die Gesamtzeit stehen haben die das Backup gebraucht hat.
Habe mir dazu folgendes nun zusammengestrickt :
[Edit Biber] Nach Rücksprache per PN mit Chipy Beitrag auf gelöst und geschlossen gesetzt am 21.02.2007 [/Edit]
beschäftige mich seit kurzem intensiver mit Batch.
Nun stehe ich vor eine naja nicht gerade problem, aber mich Quält eine frage und zwar
geht dieser Snippsel auch einfacher auszuwerten ?
Ich habe ein Backupscript geschrieben läuft auch einwandfrei.
Nun erstelle ich mir dementsprechend auch ein Logfile. Aber wenn die Datensicherung durch ist möchte ich im Logfile
die Gesamtzeit stehen haben die das Backup gebraucht hat.
Habe mir dazu folgendes nun zusammengestrickt :
@Echo Off & SetLocal
:: Vitruellen Wert Setzen
Set Virt=1000000
:: Aktuelle Zeit in eine Datei speichern
Echo %time% >zeit.tmp
:: Gespeicherte Datei mit Zeit formatieren
FOR /F "tokens=1,2,3 delims=:," %%a in (zeit.tmp) do set timeA=%%a%%b%%c
:: Zum testen 5 sekunden warten / Hier würde mein Backup (rar) nun starten
wait 5
:: Wieder aktuelle Zeit in eine Datei speichern
Echo %time% >zeit.tmp
:: Und hier wieder die Zeit formatieren
FOR /F "tokens=1,2,3 delims=:," %%a in (zeit.tmp) do set timeB=%%a%%b%%c
:: die 2 gespeicherten Zeiten ausrechnen und die differenz speichern
:: Virtuellen Wert mit differnz zusammenrechnen
set /a VirtA=%timeB%-%timeA% && set /a VirtB=%Virt%+%VirtA%
:: Das Entergebniss in einem leserlichen Format mit : speichern.
set ErG=%VirtB:~1,2%:%VirtB:~3,2%:%VirtB:~-2%
:: Ergebniss ausgeben
Echo Dauer %ErG%
[Edit Biber] Nach Rücksprache per PN mit Chipy Beitrag auf gelöst und geschlossen gesetzt am 21.02.2007 [/Edit]
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 51963
Url: https://administrator.de/contentid/51963
Ausgedruckt am: 22.11.2024 um 19:11 Uhr
9 Kommentare
Neuester Kommentar
G' Abend,
also ich habe mal ein bisschen "gekürtzt".
Das ist übrig geblieben:
Jedoch der Set Befehl erzeugt einen Fehler (Fehlende Klammer). Warum?? Weiß ich gerade auch nicht. Ansonsten würde es so gehen!! Hoffe, dass ich dich ein Stück weitergebracht habe.
Grüße
Dani
also ich habe mal ein bisschen "gekürtzt".
Das ist übrig geblieben:
@echo Off & SetLocal
:: Vitruellen Wert Setzen
set Virt=1000000
for /f "delims=:, tokens=1,2,3" %%a in ('echo %time%') do set timeA=%%a%%b%%c
ping 127.0.0.1 -n 5 >nul
for /f "tokens=1,2,3 delims=:," %%a in ('echo %time%') do set timeB=%%a%%b%%c
set /a VirtB=%Virt%+(%timeB%-%timeA%)
echo Dauer: %VirtB:~1,2%:%VirtB:~3,2%:%VirtB:~-2%
Grüße
Dani
@Dani
Das "echo %time%" sollte ein Komma vor den Hundertstelsekunden (die hier übrigens total vernachlässigt werden - da muss man die Genauigkeit dieser Messung dann aber schon anzweifeln ) liefern, ersetzt es aber durch eine Leerstelle - also:
Wenn das Komma schon nichts nützt, sollte es zumindest auch nicht schaden - daher zur Sicherheit dabei lassen ...
Grüße
bastla
Warum??
Das "echo %time%" sollte ein Komma vor den Hundertstelsekunden (die hier übrigens total vernachlässigt werden - da muss man die Genauigkeit dieser Messung dann aber schon anzweifeln ) liefern, ersetzt es aber durch eine Leerstelle - also:
for /f "tokens=1,2,3 delims=:, " ...
Grüße
bastla
@Chipy
Wenn Du denn gesteigerten Wert auf Kürzerfassungen (noch nicht "Kürzest" - Biber war noch nicht da) legst (geht's Dir also doch um Sekundenbruchteile bei der Laufzeit ):
Die Variablennamen verkürze ich aber nimmer ...
Grüße
bastla
Wenn Du denn gesteigerten Wert auf Kürzerfassungen (noch nicht "Kürzest" - Biber war noch nicht da) legst (geht's Dir also doch um Sekundenbruchteile bei der Laufzeit ):
@echo Off & SetLocal
for /f "tokens=1-3 delims=: " %%a in ('echo %time%') do set timeA=%%a%%b%%c
sleep 5
for /f "tokens=1-3 delims=: " %%a in ('echo %time%') do set timeB=%%a%%b%%c
set /a VirtB=1000000+%timeB%-%timeA%
echo Dauer: %VirtB:~1,2%:%VirtB:~3,2%:%VirtB:~-2%
Grüße
bastla
Moin Chipy,
ich würde einen anderen Ansatz wählen.
Meine Skizze:
[...ungetestete Skizze]
Gruss
Biber
ich würde einen anderen Ansatz wählen.
Meine Skizze:
@echo off & setlocal
for /f "tokens=1-3 delims=:," %%i in ("%time%") do set /a start=%%i*3600+60*%%j+%%k
REM Variable %Start% hat jetzt einen in Sekunden umgerechneten %time%-Wert.
Pause
REM Wo jetzt pause steht, ist natürlich der MachMirDenBackup-Teil
for /f "tokens=1-3 delims=:," %%i in ("%time%") do set /a stop=%%i*3600+60*%%j+%%k
REM Auch Variable %Stop% hat jetzt einen in Sekunden umgerechneten %time%-Wert.
Set /a DauerInMin=(stop-start) %% 60
Set /a UndRestInSecs= (stop-start) - DauerInMin*60
Echo Gedauert hat es %dauerInMin%:%UndRestInSecs%
REM Oder formatiert:
Set /a FmtSecs=UndRestInSecs+100
Set /a FmtMins=DauerInMin+100
Echo Gedauert hat es %FmMins:~-2%:%FmtSecs:~-2%
Gruss
Biber
Moin Chipy,
...aber das war in der Tat Bullshit:
Der Rest mit den Fmtxxx-Variablen ist nur Spielerei zur Formatierung im hh:mm-Format.
Gruss
Biber
start=%%i*3600+60*%%j+%%k
Na ja, das stimmte noch um 21:52:34,24..set /a start=21*3600+60*52+34
78754
78754
...aber das war in der Tat Bullshit:
DauerInMin=(stop-start) %% 60 <- Wozu %%60 ?
Natürlich nicht Modulo 60 sondern geteilt durch 60.DauerInMin=(stop-start)/ 60
Der Rest mit den Fmtxxx-Variablen ist nur Spielerei zur Formatierung im hh:mm-Format.
Gruss
Biber
Moin Chipy,
nach Deinen mahnenden Worten hier noch mal die oberflächlich getestete Version meiner damaligen Skizze.
Demo:
Gruss
Biber
nach Deinen mahnenden Worten hier noch mal die oberflächlich getestete Version meiner damaligen Skizze.
::---ShowTime.bat Biber 2007 Sinnfreier Batch zur Demo Zeitdaueranzeige im Batch
@echo off & setlocal
for /f "tokens=1-3 delims=:," %%i in ("%time%") do set /a start=%%i*3600+60*(1%%j %% 100)+1%%k-100
REM Variable %Start% hat jetzt einen in Sekunden umgerechneten %time%-Wert.
Pause
REM Wo jetzt pause steht, ist natürlich der MachMirDenBackup-Teil
for /f "tokens=1-3 delims=:," %%i in ("%time%") do set /a stop=%%i*3600+60*(1%%j %% 100)+1%%k-100
REM Auch Variable %Stop% hat jetzt einen in Sekunden umgerechneten %time%-Wert.
Set /a DauerInMin=(stop-start) / 60
Set /a UndRestInSecs= (stop-start) - DauerInMin*60
@Echo [Unformatiert] Gedauert hat es %dauerInMin%:%UndRestInSecs%
REM Oder formatiert:
Set /a FmtSecs=UndRestInSecs+100
Set /a FmtMins=DauerInMin+100
@Echo [Formatiert] Gedauert hat es %FmtMins:~-2%:%FmtSecs:~-2%
>f:\temp\ShowTime.bat
Drücken Sie eine beliebige Taste . .
[Unformatiert] Gedauert hat es 1:2
[Formatiert] Gedauert hat es 01:02
Gruss
Biber