Mit Zeit rechnen ?
Hi
ich wollte ne zeit rechnung für eine batch datei schreiben.
kam auch ein kleines stück weit.
hab mich dann hier im forum umgeschaut aber da war nichts vergleichbares.
hab am anfang
set %time%=TStart
und am ende
set /a TEnd=%TStart%-%time%
@echo %TEnd%
nach adam riese sollte dann die sekunden differez rauskommen...
aber ich bekomme "fehlender opperator" zurück
verständlich da er die Zeit mit ihren Doppelpunkten ( als rechen operatoren sieht
How i can lös das ?
:- (
hoffe ihr könnt mir helfen
ich wollte ne zeit rechnung für eine batch datei schreiben.
kam auch ein kleines stück weit.
hab mich dann hier im forum umgeschaut aber da war nichts vergleichbares.
hab am anfang
set %time%=TStart
und am ende
set /a TEnd=%TStart%-%time%
@echo %TEnd%
nach adam riese sollte dann die sekunden differez rauskommen...
aber ich bekomme "fehlender opperator" zurück
verständlich da er die Zeit mit ihren Doppelpunkten ( als rechen operatoren sieht
How i can lös das ?
:- (
hoffe ihr könnt mir helfen
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 77291
Url: https://administrator.de/forum/mit-zeit-rechnen-77291.html
Ausgedruckt am: 23.12.2024 um 11:12 Uhr
8 Kommentare
Neuester Kommentar
Moin nowologix,
Zeit und Datum werden im Batch/am CMD zwar angezeigt, sind aber nur Texte.
Rechnen kann man/frau nicht damit, es existiert kein Datentyp "Datum" oder "Zeit" im Batch.
Du kannst allerdings den angezeigten Zeit- oder Datumswert (stehen in den Variablen %time% bzw. %date%) zerlegen und die Struktur auflösen.
Am CMD-Prompt wäre ein Test mit %time%
Grüße
Biber
Zeit und Datum werden im Batch/am CMD zwar angezeigt, sind aber nur Texte.
Rechnen kann man/frau nicht damit, es existiert kein Datentyp "Datum" oder "Zeit" im Batch.
Du kannst allerdings den angezeigten Zeit- oder Datumswert (stehen in den Variablen %time% bzw. %date%) zerlegen und die Struktur auflösen.
Am CMD-Prompt wäre ein Test mit %time%
for /f "delims=:, tokens=1-3" %i in ("%time%") do Set /a TStart=%i*3600+%j*60+k
for /f "delims=:, tokens=1-3" %i in ("%time%") do Set /a TEnde=%i*3600+%j*60+k
Set /a TDauer=TEnde-TStart
Grüße
Biber
aber ich bekomme "fehlender opperator" zurück
Heißt Du eine spezielle Ruhrpott-Version von XP?
Moin Nowologix,
Am CMD-Prompt Zählvariablen mit einen %-Zeichen (%i, %j, %k), im Batch mit zweien (%%i, %%j, %%k).
Aber egal ob mit FOR/F-Anweisung oder mit der Substr-Funktion: Die Stunden/Minuten und Sekunden müssen in einen Wert "in Sekunden" umgerechnet werden.
Und beim "Rechnen" musst Du beachten, dass bei Minuten und Sekunden auch "08" und "09" als Werte geliefert werden können - diese führen wegen der führenden "0" zu Problemen und müssen vorher zu gültigen Zahlen 8 bzw 9 gemacht werden.
Grüße
Biber
Da bekomme ich " "timei*3600+j*60+k" ist syntaktisch an dieser Stelle nicht verarbeitbar. " zurück...
Das mag daran liegen, dass meins eine Test-Zeile am CMD-Prompt ist und Du diese im Batch verwendet hat.Am CMD-Prompt Zählvariablen mit einen %-Zeichen (%i, %j, %k), im Batch mit zweien (%%i, %%j, %%k).
und ich verstehe den code nicht :- /
Vielleicht hilft Dir folgender Zwischenschritt am CMD-Prompt beim Verständnis...$cmd$for /f "delims=:, tokens=1-3" %i in ("%time%") do @echo [%time%] hh:%i mm:%j Sec:%k
Aber egal ob mit FOR/F-Anweisung oder mit der Substr-Funktion: Die Stunden/Minuten und Sekunden müssen in einen Wert "in Sekunden" umgerechnet werden.
Und beim "Rechnen" musst Du beachten, dass bei Minuten und Sekunden auch "08" und "09" als Werte geliefert werden können - diese führen wegen der führenden "0" zu Problemen und müssen vorher zu gültigen Zahlen 8 bzw 9 gemacht werden.
Grüße
Biber
Moin Nowologix,
Nachtrag.
Falls Du auch VBScript benutzen kannst/darfst, ist das Leben etwas einfacher.
In VBScript existiert u.a. eine Funktion "Timer", die immerhin die "Sekunden seit Mitternacht" mit zwei Nachkommastellen zurückgibt.
Wenn Du dieses Feature nutzen willst...
Das ganze temporäre VBS-Snippet besteht aus der Halbzeile " WScript.echo int(Timer)" und liefert die Sekunden seit Mitternacht als Integer zurück.
Grüße
Biber
Nachtrag.
Falls Du auch VBScript benutzen kannst/darfst, ist das Leben etwas einfacher.
In VBScript existiert u.a. eine Funktion "Timer", die immerhin die "Sekunden seit Mitternacht" mit zwei Nachkommastellen zurückgibt.
Wenn Du dieses Feature nutzen willst...
::--- TestTimer.cmd
@echo off & setlocal
Set "ct=%temp%\CallTimer.vbs"
Set "callct=cscript //nologo "%ct%""
echo WScript.echo int(Timer) >"%ct%"
For /f %%i in ('%callct%') do set TStart=%%i
pause
For /f %%i in ('%callct%') do set /a TDauer=%%i - TStart
@echo Dauer %TDauer% Sekunden
Del "%ct%"
Das ganze temporäre VBS-Snippet besteht aus der Halbzeile " WScript.echo int(Timer)" und liefert die Sekunden seit Mitternacht als Integer zurück.
Grüße
Biber
@bastla
Es sei denn ein Batch läuft mal dreieinhalb Wochen (oder allgemeiner: länger als einen Tag).
Ob etwas 2 Sekunden oder einen Tag plus 2 Sekunden gedauert hat, das kann die Timer-Funktion genausowenig auseinanderhalten wie manuell zerlegte %time%-Aufdröselungen.
Wenn es also für alle Widrigkeiten der Bätcherei geeignet sein soll, dann wäre man/frau nur mit einem DateDiff()-Vergleich auf der sicheren Seite.
[OT]
Was ich interessant finde ist, dass ausgerechnet die Beiträge, bei denen frühzeitig geschrieben wird "geht nicht!" (verdeckte Passworteingabe, Laufbalken, Papierkorb umbenennen, Datumsberechnungen,..) sich immer tagelang hinziehen...
[/OT]
Grüße
Biber
...einfügst, sollte nix mehr schiefgehen können ...
...sollte eigentlich nix mehr schiefgehen können ...Es sei denn ein Batch läuft mal dreieinhalb Wochen (oder allgemeiner: länger als einen Tag).
Ob etwas 2 Sekunden oder einen Tag plus 2 Sekunden gedauert hat, das kann die Timer-Funktion genausowenig auseinanderhalten wie manuell zerlegte %time%-Aufdröselungen.
Wenn es also für alle Widrigkeiten der Bätcherei geeignet sein soll, dann wäre man/frau nur mit einem DateDiff()-Vergleich auf der sicheren Seite.
[OT]
Was ich interessant finde ist, dass ausgerechnet die Beiträge, bei denen frühzeitig geschrieben wird "geht nicht!" (verdeckte Passworteingabe, Laufbalken, Papierkorb umbenennen, Datumsberechnungen,..) sich immer tagelang hinziehen...
[/OT]
Grüße
Biber