![]() |
Dauer von Code in Batch-Datei
Ich habe folgenden Code in einer Batchdatei:
Code:
Kann man da irgendwie am Ende die Zeit ausgeben, die für dessen Ausführung benötigt wurde?
xcopy "C:\Programme\MySQL\MySQL Server 6.0\data\products_mpu" "d:\Datenbanken\MySQL\products_mpu" /E /C /I /Y
call 7z -t7z -mx=1 -ms=off -slp a "q:\eigene Dateien\files_%date%.7z" "d:\" -x!"d:\~Austausch" -x!"d:\Ausbildung FIAE" -x!"d:\Homepage" -x!"d:\Borland Studio Projects" -x!"d:\Borland Studio-Projekte" -x!"d:\Eigene Musik\" -x!"d:\Eigene Videos" -x!"d:\RECYCLER" -x!"d:\System Volume Information" -x!"d:\Visual Studio 2005" -x!"d:\Visual Studio 2008" -x!"d:\FrostWire" |
Re: Dauer von Code in Batch-Datei
Nicht das ich wüsste, du kannst dir aber sicher eine kleine Delphianwendung auf Consolenbasis basteln.
|
Re: Dauer von Code in Batch-Datei
Im
![]() ![]() |
Re: Dauer von Code in Batch-Datei
Nun ja,m das ist mein backup Script, da wollte ich eigentlich keine großartige Sache draus machen. Wenn sich da was ändert kann man schön schnell die Änderungen einpflegen.
Timeit wäre natürlich eine Möglichkeit, aber da ist mir der Aufwand etwas zu groß, aber ich werde es mir mal angucken. Danke für den Hinweis. |
Re: Dauer von Code in Batch-Datei
Du kannst es auch einfach mit den integrierten Funktionen machen, dann brauchst du da keine Zusatztools. ;-)
Ein paar Sekunden ![]() ![]() |
Re: Dauer von Code in Batch-Datei
Die Lösung dort hat ein Problem mit Tageswechseln. Sollte der Vorgang heute um 23:50 starten und morgen um 0:50 beendet werden, hast Du ein Problem ;).
Bleibe dabei, daß die eleganteste Lösung ein kleines Tool ist, das GetProcessTimes benutzt um die Laufzeit zu ermitteln. |
Re: Dauer von Code in Batch-Datei
Wenn Startzeit und Endzeit reichen (incl. Kopfrechenaufgabe), wäre es einfach.
Die Lösung aus jaenickes Link ist natürlich die Lösung für Perfektionisten (die nur in der Tagschicht beschäftigt sind). ;) |
Re: Dauer von Code in Batch-Datei
@Satty: Was hättest du für eine Lösung?
@jaenicke: Puh, das sieht ziemlich kompliziert aus. |
Re: Dauer von Code in Batch-Datei
Code:
Erste Pause ist Dein Script... zweite Pause nur damit man die Ausgabe sieht. Umleiten in eine Txt-Datei ist natürlich auch möglich.
@set Zeit1=%TIME%
pause @echo Start: %Zeit1% @echo Ende: %TIME% pause |
Re: Dauer von Code in Batch-Datei
Stellt die Systemzeit oder zeigt sie an.
TIME [/T | Zeit] TIME ohne Parameter zeigt die aktuelle Systemzeit an und fragt nach der neuen Uhrzeit. Drücken Sie die EINGABETASTE, um die bisherige Zeit beizubehalten. Wenn die Befehlserweiterungen aktiviert sind, unterstützt der TIME-Befehl die /T-Option. Durch diese Option wird dem Befehl mitgeteilt, dass nur die aktuelle Zeit ausgegeben werden soll, ohne nach einer neuen Zeit zu fragen. |
Re: Dauer von Code in Batch-Datei
...und %Time% ruft nicht den Befehl auf, sondern wird wie eine Umgebungsvariable mit der aktuellen Zeit "gefüllt". Womit sich das dann zuweisen lässt.
Option /T zeigt nur die Zeit im Format SS:MM (zumindest bei mir), was wohl zu ungenau wäre. |
Re: Dauer von Code in Batch-Datei
bei der Berechnung aus Post #5 ... zusammen mit %date" wäre das Problem mit dem Tageswechsel gelößt,
aber man muß beim Parsen aufpassen, da für %time% und %date% das aktuelle Datums-/Zeitformat genutzt wird (die Trennzeichen und Reinfolge der Zahlen sind also Systemabhängig) |
Re: Dauer von Code in Batch-Datei
So ist es.
Bei dem Script aus Post #5 gibt es bei der Zeitberechnung Fehler zB. wenn "10:00:00 - 09:55:02" berechnet wird. Ich habe mal was zusammengeklöppelt ohne eine Temp-.Datei zu benötigen:
Code:
Jetzt müsste man nur noch das Datumsgedöns und den Tegeswechsel mit einbeziehen.
@ECHO OFF
REM --- Start der Zeitmessung ------------------------------------------------ FOR /F "eol=; tokens=1,2,3,4,5* delims=:;, " %%i IN ("%TIME%") DO ( SET /A sDezTime= %%i * 3600 + %%j * 60 + %%k ) FOR /F "eol=; tokens=1,2,3,4,5* delims=:;,. " %%i IN ("%DATE%") DO ( SET sDateDay= %%i%%j%%k ) REM === Zu messende Action =================================================== REM pause REM REM ========================================================================== REM --- Ende der Zeitmessung ------------------------------------------------- FOR /F "eol=; tokens=1,2,3,4,5* delims=:;, " %%i in ("%TIME%") DO ( SET /A eDezTime= %%i * 3600 + %%j*60 + %%k ) FOR /F "eol=; tokens=1,2,3,4,5* delims=:;,. " %%i IN ("%DATE%") DO ( SET eDateDay= %%i%%j%%k ) REM --- Datumdifferenz berechnen --------------------------------------------- SET /A DateDif= (%eDateDay% - %sDateDay%) REM --- Zeitdifferenz berechnen ---------------------------------------------- SET /A TimeDif= (%eDezTime% - %sDezTime%) SET /A Hour= %TimeDif% / 3600 SET /A TimeDif= %TimeDif% %% 3600 SET /A Minut= %TimeDif% / 60 SET /A TimeDif= %TimeDif% %% 60 SET /A Secund= %TimeDif% REM --- Zeitausgabe ---------------------------------------------------------- ECHO. ECHO Tage: %DateDif% (Fehlerbehafted !) ECHO Die Laufzeit betrug %Hour%:%Minut%:%Secund% h ECHO. REM --- Variablen zurueckdetzen ----------------------------------------------- REM --- "SETLOCAL" währe wol auch eine Moeglichkeit ;-) SET sDateDay= SET eDezDate= SET DateDif= SET sDezTime= SET eDezTime= SET TimeDif= SET Hour= SET Minut= SET Secund= Das ist mir aber zu komplex. |
Re: Dauer von Code in Batch-Datei
Zitat:
|
Re: Dauer von Code in Batch-Datei
@ turboPASCAL: Also das ist mir dann doch etwas zu viel Overkill. Da ist ja der Code für die zeitmessung länger und komplexer als der eigentliche Code für den ich die Batch-Datei erstellt habe. Das steht dann doch in keinem Verhältnis mehr.
|
Re: Dauer von Code in Batch-Datei
Und was spricht jetzt unbedingt gegen ein Extraprogramm? (muß ja nicht aufwendig sein)
Delphi-Quellcode:
Program CalcTime;
{$APPTYPE CONSOLE} Uses SysUtils; Var N: String; F: TextFile; T: TDateTime; Begin Try N := ChangeFileExt(ParamStr(0), '.time'); If SameText(ParamStr(1), '/start') Then Begin Assign(F, N); Rewrite(F); Write(F, Now); CloseFile(F); End Else If SameText(ParamStr(1), '/stop') Then Begin Assign(F, N); Reset(F); Read(F, T); CloseFile(F); DeleteFile(N); WriteLn(TimeToStr(Now - T)); End Else Raise Exception.Create('unknown parameter'); Except On E: Exception do Writeln(E.Classname, ': ', E.Message); End; End.
Code:
oder
CalcTime /start
... CalcTime /stop
Code:
CalcTime /start
... CalcTime /stop > Logfile.txt (ungetestet ... nur mal schnell so zusammengetippt) |
Re: Dauer von Code in Batch-Datei
Weil ich es so einfach wie möglich halten wollte. Und das anzeigen der Dauer eigentlich nur ein netter Gimmick gewesen wäre.
|
Re: Dauer von Code in Batch-Datei
Zitat:
Nur ein Tageswechsel mit einzubeziehen, das wäre Overkill. :mrgreen:
Code:
@ECHO OFF
FOR /F "eol=; tokens=1,2,3,4,5* delims=:;, " %%i IN ("%TIME%") DO SET /A sDezTime= %%i * 3600 + %%j * 60 + %%k REM === Zu messende Action =================================================== REM PS.: call 7z ... ist sehr leicht lesbar. ;-) xcopy "C:\Programme\MySQL\MySQL Server 6.0\data\products_mpu" "d:\Datenbanken\MySQL\products_mpu" /E /C /I /Y call 7z -t7z -mx=1 -ms=off -slp a "q:\eigene Dateien\files_%date%.7z" "d:\" -x!"d:\~Austausch" -x!"d:\Ausbildung FIAE" -x!"d:\Homepage" -x!"d:\Borland Studio Projects" -x!"d:\Borland Studio-Projekte" -x!"d:\Eigene Musik\" -x!"d:\Eigene Videos" -x!"d:\RECYCLER" -x!"d:\System Volume Information" -x!"d:\Visual Studio 2005" -x!"d:\Visual Studio 2008" -x!"d:\FrostWire" REM ========================================================================== FOR /F "eol=; tokens=1,2,3,4,5* delims=:;, " %%i in ("%TIME%") DO SET /A eDezTime= %%i * 3600 + %%j*60 + %%k) SET /A TimeDif= (%eDezTime% - %sDezTime%) SET /A Hour= %TimeDif% / 3600 SET /A TimeDif= %TimeDif% %% 3600 SET /A Minut= %TimeDif% / 60 SET /A TimeDif= %TimeDif% %% 60 SET /A Secund= %TimeDif% ECHO. ECHO Die Laufzeit des Backups betrug %Hour%:%Minut%:%Secund% h ECHO. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:38 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz