mycroftone
Goto Top

Aus LogDatei 2 Eintrage mit Datum Auslesen und den Eintrag mit dem Neuere Datum übernehmen.

Hallo Zusammen

Ich habe hier zwar schon einige Beitrage zu Datei alte als ( also in gewisser weise auch 2 Datems vergelichen ) gelesen .
Aber immer war klar oder nicht interressant welches Datum das Jüngere ist und der Zeitliche Unterschied er interressant.

Ich habe aber eine LogDatei mit 2 Einträgen wo nicht klar ist welcher der Jüngere ist auch ist der Zeitunterschied eigentlich nicht wichtig.

Etwas Konkreter ich habe die 6 Variablen Datum1 und Zeit1 Eintrag1 Datum2 und Zeit2 Eintrag 2.

In Beiden Zeilen steht.

21.12.2009 14:01 Download OK
21.12.2009 20:14 Download OK

Ich will jetzt nur den Jungeren Eintrag also

21.12.2009 20:14 Download OK weiterverarbeiten


Oder wie im folgenden Beispiel

19.12.2009 18:05
18:12.2009 07:32

19:12.2009 18:05 der Jüngere Eintrag ist ich also den weiterverarbeiten will.

Natürlich kann man jetzt Sagen na ist doch bei einer Logdatei ganz Einfach der weiter unten stehende Eintrag ist der Jüngere.
Aber da ich dieses Logdatei aus mehreren anderen Zusammenbaue kann man es nicht sagen.


Kann man es irgendwie errechnen welcher Eintrag der Jüngere Ist

Content-Key: 132154

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

Printed on: April 19, 2024 at 21:04 o'clock

Member: bastla
bastla Dec 22, 2009 at 16:18:06 (UTC)
Goto Top
Hallo mycroftone!

Der folgende Batch sollte auch aus mehr als 2 (mit dem beschriebenen Timestamp beginnenden) Zeilen den jüngsten Eintrag finden:
@echo off & setlocal
set "Log=D:\Log.txt"  

set "J=0"  
set "JZeile="  
for /f "usebackq delims=" %%i in ("%Log%") do set "Zeile=%%i" & call :ProcessLine  
if not defined JZeile echo Keine Daten! & goto :eof
echo Juengster Eintrag: %JZeile%
goto :eof

:ProcessLine
for /f "tokens=1-5 delims=.: " %%a in ("%Zeile%") do if "%%c%%b%%a%%d%%e" gtr "%J%" (set "J=%%c%%b%%a%%d%%e" & set "JZeile=%Zeile%")  
goto :eof
Grüße
bastla
Member: mycroftone
mycroftone Feb 11, 2010 at 21:04:51 (UTC)
Goto Top
Danke Bastel

Funktioniert wunderbar habe alles beides in eine Underfunktion von meiner Batch eingefügt alles bestens
Member: mycroftone
mycroftone Feb 16, 2010 at 11:22:01 (UTC)
Goto Top
Hallo Bastel

Habe jetzt noch die Sekunden mit in den Einträgen weil ich festgestellt haben das es dann doch einigegleiche einträge gibt.

Aber leider ignoriert dein Script die Sekunden.

Hier ein Beispiel.

=========================================
13.01.2010 22:16:09 PROD_IS_Full_0110_SW
13.01.2010 22:16:46 PROD_IS_Full_0110_SW

Juengster Eintrag: 13.01.2010 22:16:09 PR



Wie muss man es anpassen damit er auch dort noch einen Unterscheidung zwischen den zwei Zeilen macht.

Kannst du mir auch nochmal helfen
Member: bastla
bastla Feb 16, 2010 at 12:00:09 (UTC)
Goto Top
Hallo mycroftone!

Wenn der Timestamp nicht mehr nur 5, sondern jetzt 6 Bestandteile ("tokens") hat, sollte folgende Änderung genügen:
for /f "tokens=1-6 delims=.: " %%a in ("%Zeile%") do if "%%c%%b%%a%%d%%e%%f" gtr "%J%" (set "J=%%c%%b%%a%%d%%e%%f" & set "JZeile=%Zeile%")
Grüße
bastla
Member: mycroftone
mycroftone Feb 16, 2010 at 12:28:55 (UTC)
Goto Top
Hallo Bastle

Ja super habe jetzt folgende Subroutine in meine Batchdatei und die funktioniert wie von euch gewohnt jetzt einfach.


 

:Juengster-Eintrag

echo.
echo Suche Juengsten Eintrag in !Log-search-newest!
echo.
echo =============================================
type %Log-search-newest%
echo =============================================
echo.


set "J=0"  
set "JZeile="  
for /f "usebackq delims=" %%i in ("%Log-search-newest%") do set "Zeile=%%i" & call :ProcessLine  
if not defined JZeile echo Keine Daten! & goto :eof
echo.
echo Juengster Eintrag: %JZeile%
echo.
set newest-Entry=%JZeile%


echo. 
echo Variablen mit Ausfuehrungszeichen
echo.
echo "!newest-Entry!"  
echo.


goto :eof

:ProcessLine
for /f "tokens=1-6 delims=.: " %%a in ("%Zeile%") do if "%%c%%b%%a%%d%%e%%f" gtr "%J%" (set "J=%%c%%b%%a%%d%%e%%f" & set "JZeile=%Zeile%")  
goto :eof

 

Besten Dank nochmal

mycroftone