Laufzeit bzw. Dauer einer Batch ermitteln!
Stoppuhrfunktion mit Angabe der verstrichenen Zeit für eine Batchdatei auch ohne 4NT bzw. Take Command von jpsoft möglich?
Moin moin,
ich möchte gerne die Dauer einer Batchdatei (von dem Aufruf bis zur Beendigung der Batch) ermitteln.
Derzeit setze ich als Behelfslösung wegen des Befehls "Timer" 4NT ein. Ich hätte aber gerne eine generelle Lösung für die Standard CMD-Shell für Windows XP, die kein Geld kostet!
Der Befehl startet beim ersten Aufruf "timer" (4NT-CMD-Shell OUTPUT:Stoppuhr 1 an: 06:56:45) und wird beendet durch einen zweiten Aufruf "timer" (4NT-CMD-Shell OUTPUT: Stoppuhr 1 aus: 06:57:55 Verstrichene Zeit: 0:01:09,91)
Der Aufruf und Auswertung des Befehl "timer" (mit 4NT) in der 4NT-CMD-Shell sieht hierbei folgender maßen aus:
Ich würde mich freuen, wenn jemand noch eine schlaue Idee hätte die "Timer"-Funktion von 4NT mit anderen Hilfsmitteln zu lösen!
Viele Grüße
Andichrist
Moin moin,
ich möchte gerne die Dauer einer Batchdatei (von dem Aufruf bis zur Beendigung der Batch) ermitteln.
Derzeit setze ich als Behelfslösung wegen des Befehls "Timer" 4NT ein. Ich hätte aber gerne eine generelle Lösung für die Standard CMD-Shell für Windows XP, die kein Geld kostet!
Der Befehl startet beim ersten Aufruf "timer" (4NT-CMD-Shell OUTPUT:Stoppuhr 1 an: 06:56:45) und wird beendet durch einen zweiten Aufruf "timer" (4NT-CMD-Shell OUTPUT: Stoppuhr 1 aus: 06:57:55 Verstrichene Zeit: 0:01:09,91)
Der Aufruf und Auswertung des Befehl "timer" (mit 4NT) in der 4NT-CMD-Shell sieht hierbei folgender maßen aus:
@echo off & setlocal
:: 1. Aufruf der Funktion Timer unter 4NT (Timer-OUTPUT: Stoppuhr 1 an: 06:56:45)
timer
..
...
... <<sonstiger Code>>
...
...
:: Timer wird in LOG-Datei mit protokolliert!
:LOG
:: 2. Aufruf der Funktion Timer unter 4NT
timer > stop.txt
:: ermitteln der Position des Wertes der verstrichenen Zeit (Timer-OUTPUT: Stoppuhr 1 aus: 06:57:55 Verstrichene Zeit: 0:01:09,91)
FOR /F "tokens=7" %%i in (stop.txt) do set stop=%%i
if not exist "Log". md "Log"
@echo --- Dauer: --- %stop% --- >> LOG/History.txt
del stop.txt >nul
Ich würde mich freuen, wenn jemand noch eine schlaue Idee hätte die "Timer"-Funktion von 4NT mit anderen Hilfsmitteln zu lösen!
Viele Grüße
Andichrist
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 79909
Url: https://administrator.de/contentid/79909
Ausgedruckt am: 08.11.2024 um 13:11 Uhr
10 Kommentare
Neuester Kommentar
Hallo Andichrist!
Nur zum Spaß ein Lösungsansatz in native Batch (ansonsten würde ich VBS verwenden):
Die Startzeit wird (überraschender Weise ) in %Startzeit% gespeichert und kann natürlich bei Bedarf zB mit
protokolliert werden.
Zum Testen wird die jeweilige Start- und Endzeit auch auf dem Bildschirm ausgegeben.
Die Endzeit und die formatierten Teile (h,m,s und hs) der berechneten Differenz werden danach ebenfalls in Variablen abgelegt.
Grüße
bastla
Nur zum Spaß ein Lösungsansatz in native Batch (ansonsten würde ich VBS verwenden):
@echo off & setlocal
:: Startzeit (in Hundertstelsekunden) holen und speichern
call :GetTime
set "Startzeit=%t%"
set "Start=%TimeInHSec%"
echo %Startzeit%
:: Zum Testen eine ...
PAUSE
:: Endzeit (in Hundertstelsekunden) holen und speichern
call :GetTime
set "Endzeit=%t%"
set "End=%TimeInHSec%"
echo %EndZeit%
:: Ermittlung und Zerlegung/Formatierung der Differenz
set /a Diff=%End%-%Start%
:: Tageswechsel beachten
if %Diff% lss 0 set /a Diff+=8640000
set DiffRem=%Diff%
:: Hundertstelsekunden holen
call :GetPart 100
set hs=%Part%
:: Sekunden holen
call :GetPart 60
set s=%Part%
:: Minuten holen
call :GetPart 60
set m=%Part%
:: Stunden bleiben als Rest
set h=%DiffRem%
::Ausgabe der Differenz
echo Dauer: %h%:%m%:%s%,%hs%
goto :eof
:GetTime
:: Aktuelle Zeit verwenden ...
set t=%time%
:: ... zerlegen ...
for /f "tokens=1-4 delims=:," %%i in ("%t%") do set "h=%%i" & set "m=%%j" & set "s=%%k" & set "hs=%%l"
:: ... Oktalzahlklippen umschiffen ...
if %m:~0,1%==0 set m=%m:~1%
if %s:~0,1%==0 set s=%s:~1%
if %hs:~0,1%==0 set hs=%hs:~1%
:: ... und in Hundertstelsekunden-Wert umrechnen.
set /a TimeInHSec=((%h%*60+%m%)*60+%s%)*100+%hs%
goto :eof
:GetPart
::Anhand des Aufrufparameters (60 oder 100) aufspalten ...
set /a Part=%DiffRem%%%%1
:: ... und mit fuehrender Null formatieren sowie ...
if %Part% lss 10 set Part=0%Part%
:: ... noch aufzuteilenden Rest der Differenz ermitteln.
set /a DiffRem=%DiffRem%/%1
goto :eof
echo %Startzeit%>>LOG/History.txt
Zum Testen wird die jeweilige Start- und Endzeit auch auf dem Bildschirm ausgegeben.
Die Endzeit und die formatierten Teile (h,m,s und hs) der berechneten Differenz werden danach ebenfalls in Variablen abgelegt.
Grüße
bastla
Würde nicht funktionieren
set times=%time:~6,-3%
set timem=%time:~3,2%
set timeh=%time:~0,2%
...
set times2=%time:~6,-3%
set timem2=%time:~3,2%
set timeh2=%time:~0,2%
set difs=%times2%-%times%
set difm=%timem2%-%timem%
set difh=%timeh2%-%timeh%
echo %difh%:%difm%:%difs%
set times=%time:~6,-3%
set timem=%time:~3,2%
set timeh=%time:~0,2%
...
set times2=%time:~6,-3%
set timem2=%time:~3,2%
set timeh2=%time:~0,2%
set difs=%times2%-%times%
set difm=%timem2%-%timem%
set difh=%timeh2%-%timeh%
echo %difh%:%difm%:%difs%
Zitat von @Andichrist:
PS: Falls jemand einmal die Muße hat, ein kleines Kommadozeilen Progrämmchen (EXE oder COM) zu schreiben mit der
Funktionalität, würde ich mich auch sehr freuen!
Hallo Andichrist,PS: Falls jemand einmal die Muße hat, ein kleines Kommadozeilen Progrämmchen (EXE oder COM) zu schreiben mit der
Funktionalität, würde ich mich auch sehr freuen!
hab dir das mal in C# zusammengeschrieben - auf Wunsch kann ich dir es auch als exe-Datei zur Verfügung stellen.
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
namespace schreiben
{
class Program
{
static void Main(string args)
{
StreamWriter FileWriter = File.CreateText(@"c:\text.txt");
DateTime startdt = DateTime.Now;
string start = DateTime.Now.ToString("hh:mm:ss");
/*
* sonstiger Code
*/
string ende = DateTime.Now.ToString("hh:mm:ss");
string zeit = DateTime.Now.Subtract(startdt).ToString();
FileWriter.WriteLine("Stoppuhr 1 aus: " + ende + " Verstrichene Zeit " + zeit.Substring(0,8) + " Startzeit " + start);
FileWriter.Close();
}
}
}
MfG
DB
Hi ...,
BeispielZeiten: Format: Stunden:Minuten:sekunden
Start: 12:15:55
Ende: 12:16:40
Nein! Funktioniert so nicht da
1. set mit Parameter /a rechnet
2. Zeitüberhang von kleiner zu größer als Negativwert ausgegeben wird
3. Beim Zeitüberhang wenn kleiner zu größer Negativ gewesen wäre muss in der nächstgrößeren Einheit eins mehr abgezogen werden
4. Bei Stunden zu Tagen entsprechend plus 24 ( millisek zu sek plus 100 ) beim Negativen Ergebnis
5. Für set /a: mindestens 08 und 09 zu 8 und 9 umschreiben (wie Bastlas Batchzeile 46. bis 49. beschreibt / macht )
Gruß Phil
BeispielZeiten: Format: Stunden:Minuten:sekunden
Start: 12:15:55
Ende: 12:16:40
Nein! Funktioniert so nicht da
1. set mit Parameter /a rechnet
set /a difs=2-1
2. Zeitüberhang von kleiner zu größer als Negativwert ausgegeben wird
40 sek - 55 sek = -15 sek
-> muss also wieder plus 60 bei sek gerechnet werden um die Differenz auszurechnen.3. Beim Zeitüberhang wenn kleiner zu größer Negativ gewesen wäre muss in der nächstgrößeren Einheit eins mehr abgezogen werden
Falsch: 16 min - 15 min = 1 min
Richtig: 16 min - 15 min - 1 min = 0 min
Richtig: 16 min - 15 min - 1 min = 0 min
4. Bei Stunden zu Tagen entsprechend plus 24 ( millisek zu sek plus 100 ) beim Negativen Ergebnis
5. Für set /a: mindestens 08 und 09 zu 8 und 9 umschreiben (wie Bastlas Batchzeile 46. bis 49. beschreibt / macht )
Gruß Phil
Zitat von @Andichrist:
PS: Falls jemand einmal die Muße hat, ein kleines Kommadozeilen Progrämmchen (EXE oder COM) zu schreiben mit der
Funktionalität, würde ich mich auch sehr freuen!
PS: Falls jemand einmal die Muße hat, ein kleines Kommadozeilen Progrämmchen (EXE oder COM) zu schreiben mit der
Funktionalität, würde ich mich auch sehr freuen!
Irgendwann
Laufzeit testen, vergleichen von Laufzeiten verschiedener Skripte mit der Batch RunTimeCalc. Beispielanwendung - Schreibrechte des aktuellen Benutzers testen
Zitat von @bastla:
Hallo Andichrist!
Nur zum Spaß ein Lösungsansatz in native Batch (ansonsten würde ich VBS verwenden):
...
Hallo Andichrist!
Nur zum Spaß ein Lösungsansatz in native Batch (ansonsten würde ich VBS verwenden):
...
Grüße
bastla
bastla
Hallo bastla
Aus Spaß wird "Ernst"
Danke. War ne nette Vorlage zur Übung.
Laufzeit testen, vergleichen von Laufzeiten verschiedener Skripte mit der Batch RunTimeCalc. Beispielanwendung - Schreibrechte des aktuellen Benutzers testen
Grüße
Viewfinder