Delphi-PRAXiS
Seite 2 von 2     12   

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)

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 17:05 Uhr.
Seite 2 von 2     12   

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