Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Dauer von Code in Batch-Datei (https://www.delphipraxis.net/134519-dauer-von-code-batch-datei.html)

Luckie 23. Mai 2009 22:19


Dauer von Code in Batch-Datei
 
Ich habe folgenden Code in einer Batchdatei:
Code:
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"
Kann man da irgendwie am Ende die Zeit ausgeben, die für dessen Ausführung benötigt wurde?

turboPASCAL 23. Mai 2009 22:31

Re: Dauer von Code in Batch-Datei
 
Nicht das ich wüsste, du kannst dir aber sicher eine kleine Delphianwendung auf Consolenbasis basteln.

Fridolin Walther 23. Mai 2009 22:35

Re: Dauer von Code in Batch-Datei
 
Im Windows Server 2003 Ressource Kit findet sich die Anwendung timeit.exe mit der das möglich ist. Ansonsten findet sich hier auch Code um die Ausführung eines Befehls zu timen. Sollte trivial sein daraus ein kleines Tool zu machen:
http://www.delphipraxis.net/internal...=872205#872205

Luckie 23. Mai 2009 22:43

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.

jaenicke 23. Mai 2009 22:47

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 Bei Google suchengooglen haben mir das gebracht: ;-)
http://www.administrator.de/index.php?content=40173

Fridolin Walther 23. Mai 2009 22:53

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.

Satty67 23. Mai 2009 22:54

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). ;)

Luckie 23. Mai 2009 22:57

Re: Dauer von Code in Batch-Datei
 
@Satty: Was hättest du für eine Lösung?

@jaenicke: Puh, das sieht ziemlich kompliziert aus.

Satty67 23. Mai 2009 23:00

Re: Dauer von Code in Batch-Datei
 
Code:
@set Zeit1=%TIME%

pause

@echo Start: %Zeit1%
@echo Ende: %TIME%

pause
Erste Pause ist Dein Script... zweite Pause nur damit man die Ausgabe sieht. Umleiten in eine Txt-Datei ist natürlich auch möglich.

hathor 24. Mai 2009 07:48

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.

Satty67 24. Mai 2009 09:54

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.

himitsu 24. Mai 2009 10:08

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)

turboPASCAL 24. Mai 2009 10:43

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:
@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=
Jetzt müsste man nur noch das Datumsgedöns und den Tegeswechsel mit einbeziehen.
Das ist mir aber zu komplex.

hathor 24. Mai 2009 12:11

Re: Dauer von Code in Batch-Datei
 
Zitat:

Zitat von Satty67
...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.

Bei mir zeigt es die hundertstel Sekunden auch an.

Luckie 24. Mai 2009 14:50

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.

himitsu 24. Mai 2009 15:03

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:
CalcTime /start
...
CalcTime /stop
oder
Code:
CalcTime /start
...
CalcTime /stop > Logfile.txt

(ungetestet ... nur mal schnell so zusammengetippt)

Luckie 24. Mai 2009 15:12

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.

turboPASCAL 24. Mai 2009 15:33

Re: Dauer von Code in Batch-Datei
 
Zitat:

@ turboPASCAL: Also das ist mir dann doch etwas zu viel Overkill.
Ach, so doll viel ist das nicht. Mann kann noch etwa 40% weniger Zeilen daraus basteln.
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 00:34 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz