alme123
Goto Top

Datum und Zeit auslesen und vergleichen per batch

Hallo zusammen,

Ich habe folgende Logs:

09.10.2012 , 9:45:58,16 : PC startet
09.10.2012 , 10:45:09,12 : PC lädt logs.sys
09.10.2012 , 22:12:45,35 : PC wird heruntergefahren

Alle Logeinträge (1 Eintrag pro Zeile) sollen nach dem Datum und der Zeit geprüft werden.
Danach soll das aktuelle Datum und die aktuelle Zeit ausgelesen werden.
Alle Einträge, die nach dem aktuellen Datum und der aktuellen Zeit sind, sollen angezeigt werden.

Die Logs varieren, weshalb ich nicht die Logs einfach auslesen kann.


Danke im Vorraus.

Alme123

Content-ID: 192449

Url: https://administrator.de/contentid/192449

Printed on: October 9, 2024 at 12:10 o'clock

60730
60730 Oct 09, 2012 updated at 09:06:35 (UTC)
Goto Top
moin,

das sieht aber grausam aus....

Tag.Monat.Jahr leerzeichen komma leerzeichen Stunde:Minute:sekunde,millisek leerzeichen Doppelpunkt leerzeichen Art

Geht das nicht hybscher?
Wenn du wissen willst, wie - such des Bibers Tut zum Thema batch datum
Dann überlegst du, ob du mit größer kleiner (eher nein) oder mit findstr (n) und more was zimmerst.

Bei Gegenfragen gerne mehr, aber so ist das langweiliges vorkauen von bereits durchgekautem.

Gruß
Alme123
Alme123 Oct 09, 2012 at 14:49:04 (UTC)
Goto Top
Hi LimboSeil,

ok, ich habe mal probiert, aber das Script stürtzt immer ab...
@echo off & setlocal
set in=%time%
set zeit=%time:~0,5%
set "nach=%zeit% - PC: lädt logs.sys"  
echo %nach%>"1.txt"  
setlocal ENABLEDELAYEDEXPANSION
set strArrayNumber=0
set zahl=0
for /f "usebackq" %%i in (`type "1.txt"`) do call :ow  
set zahlo=0
:ad
set /a zahlo=%zahlo% +1
set yx=%Var!zahlo!%
set Var!zahlo!=%yx:~0,5%
if %Var!zahlo!% GTR %in% call :da
if not "%zahl%"=="%zahlo%" goto ad1  
:da
echo %Var!zahlo!%
goto :eof
:ad1
pause
exit
:ow
set /a zahl=%zahl% +1
set Var!zahl!=%%i
goto :eof

Alme123
pieh-ejdsch
pieh-ejdsch Oct 09, 2012, updated at Oct 10, 2012 at 21:26:05 (UTC)
Goto Top
moin Alme,

ich hab das mal überflogen. Ein Log ist ja immer etwas dokumentiertes - also schon vergangen. Es kann so eine Aktuelle Zeit in einem Log nie gefunden werden.

Wenn @60730 wieder die @echo off-Keule rauskramt ...

Die paar Zeilen sollen was machen?

For bietet Dir an, direkt Zeile für Zeile einer Datei abzuarbeiten. Dafür ist hier ein For-Tutorial.
In einer Sub brauchst Du nicht unbedingt enabledelayedexpansion. Bei der Berechnung mit Numerischen Variablen brauchst Du Enabledelayedexpansion schon mal überhaupt nicht, weil die Variablen nur mit den Namen (ohne ! und %) angesprochen werden. Ist auch ein Tutorial für Batch Variablen hier zu finden.

Du musst nur die Zeitinfo.cmd aus dem von @60730 aufgezeigten @Biber Tutorial benutzen um die Variablen JJ MM TT zum größer; kleiner Vergleich zu nutzen. Die Zeit kannnst Du so nicht vergleichen, da zB. 9:45 größer als 10:00 ist.
Da das Führende Zeichen (0 oder [Leerzeichen]) zum vergleichen nicht da ist musst Du dies hinzufügen - sprich einen Extra-Vergleich ob Stunde kleiner 10 dann mit führendem fehlenden (Leer-)Zeichen die Ausgabe der Datei mit der Uhrzeit Vergleichen:
if %HH% leq 9 (
  if %JJ%%MM%%TT%^ %Uhrzeitstr:,=^,% gtr %date:~-4%%date:~-7,-5%%date:~-10,-8%^%time:,=^,% echo Zeit ist groesser
) else if %JJ%%MM%%TT%%Uhrzeitstr:,=^,% gtr %date:~-4%%date:~-7,-5%%date:~-10,-8%^%time:,=^,% echo Zeit ist groesser
mit Anführungszeichen sieht es nicht so extrem aus.

Gruß Phil