Zu einem vorgegebenen Datum das vorhergehende Istdatum aus einer Logdatei ermitteln
Hallo Ich höffe hier auf Hilfe im folgende Sachverhalt
Ich habe eine /mehrere Dateien mit Einträgen von verschiedene Tagen. Also eine Rechner kann mehrere MAC Adresse im Lauf der Zeit haben.
z.B.
File1
oder
File2
Wobei sich die Anzahl der Zeile andert und die eingetragen Tag / (Datums) variieren
Und jetzt möchte ich per Batch herausfinden welcher Eintrag an einen andere vorgebene Datum zu dem Zeitpunkt am nächsten kommt.
Also wenn ich z.b. für File 1 das Datum 17.11.2009 angebe dann möchte ich das er mir sagt das der nächst älter Eintrag der 12.10.2009 ist.
Rechner1 | 00-14-38-51-03-11 | 12.10.2009 |
der Eintrag 03.12.2009 ist zwar der nähre aber das ist ja von einem neuer Rechner und bis dahin hatte der Rechner die MAC Adresse 00-17-A4-F6-C0-2F
also ist auch am 17.11.2009 die Netzwerkkarte mit der MAC Adresse 00-17-A4-F6-C0-2F im Rechner da die ja am 12.10.2009 in den Rechner kam.
Somit ist für das Datum 17.11.2009 und File 1 das richtige Ergebniss -> Rechner1 | 00-14-38-51-03-11 | 12.10.2009 |
Bei zwei Einträgen habe ich versucht die Einträge Jahr Monat und Tag herauszuziehen in Variblen zu schreiben und die mit Größer/Kleine Gleich zu Vergleichen.
Aber ich habe festgestellt es gibt Dateien mit mehr als zwei Einträgen.
Und spätestens da bin ich am ende meiner Weißheit.
Ich denke mir die Datei in einer Schleifen durchgehen und dann das Datum mit jeden Einzelen vergleichen.
Aber leider weiß ich nicht genau wie ich das in Batch technisch umsetzten soll.
Ich hoffe auf eure Unterstützung.
mycroftone
Ich habe eine /mehrere Dateien mit Einträgen von verschiedene Tagen. Also eine Rechner kann mehrere MAC Adresse im Lauf der Zeit haben.
z.B.
File1
Rechner1 | 00-17-A4-F6-C0-3F | 09.10.2008 |
Rechner1 | 00-17-A4-F6-C0-2F | 28.04.2010 |
Rechner1 | 00-14-38-51-03-11 | 12.10.2009 |
Rechner1 | 00-15-39-52-04-12 | 03.12.2009 |
oder
File2
Rechner2 | 00-16-A3-F6-C0-3F | 09.10.2008 |
Rechner2 | 00-26-B3-F6-C0-5F | 28.04.2009 |
Rechner2 | 00-14-48-51-04-11 | 12.10.2009 |
Und jetzt möchte ich per Batch herausfinden welcher Eintrag an einen andere vorgebene Datum zu dem Zeitpunkt am nächsten kommt.
Also wenn ich z.b. für File 1 das Datum 17.11.2009 angebe dann möchte ich das er mir sagt das der nächst älter Eintrag der 12.10.2009 ist.
Rechner1 | 00-14-38-51-03-11 | 12.10.2009 |
der Eintrag 03.12.2009 ist zwar der nähre aber das ist ja von einem neuer Rechner und bis dahin hatte der Rechner die MAC Adresse 00-17-A4-F6-C0-2F
also ist auch am 17.11.2009 die Netzwerkkarte mit der MAC Adresse 00-17-A4-F6-C0-2F im Rechner da die ja am 12.10.2009 in den Rechner kam.
Somit ist für das Datum 17.11.2009 und File 1 das richtige Ergebniss -> Rechner1 | 00-14-38-51-03-11 | 12.10.2009 |
Bei zwei Einträgen habe ich versucht die Einträge Jahr Monat und Tag herauszuziehen in Variblen zu schreiben und die mit Größer/Kleine Gleich zu Vergleichen.
Aber ich habe festgestellt es gibt Dateien mit mehr als zwei Einträgen.
Und spätestens da bin ich am ende meiner Weißheit.
Ich denke mir die Datei in einer Schleifen durchgehen und dann das Datum mit jeden Einzelen vergleichen.
Aber leider weiß ich nicht genau wie ich das in Batch technisch umsetzten soll.
Ich hoffe auf eure Unterstützung.
mycroftone
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Kommentar vom Moderator Biber am 20.01.2011 um 08:20:35 Uhr
Original-Titel "Näheste Datum nächst älteres Datum heraussuchen" geändert.
Content-ID: 159007
Url: https://administrator.de/contentid/159007
Ausgedruckt am: 23.11.2024 um 01:11 Uhr
12 Kommentare
Neuester Kommentar
Moin mycroftone,
Im Groben verstehe ich die Zielrichtung (glaube ich) - aber ich hätte doch nach zwei Zeilen schon laut gerufen :
WTF muss denn die "Ermittlung des nächsthöheren Folgedatums" mit Batch erfolgen -
... oder soll das irgendwo an den Rand eines bestehenden Prozesses geflanscht werden?
Grüße
Biber
Zitat von @mycroftone:
Was noch besser währ währe der nächste älter
...
... weil am 12.10.2009 kamm ein neuer Rechner und bis dahin ..
Bei zwei Einträgen habe ich versucht die Einträge Jahr Monat und Tag herauszuziehen in Variblen zu schreiben
und die mit Größer/Kleine Gleich zu Vergleichen.
...
Und spätestens da bin ich am ende meiner Weißheit.
Ich bitte dich allerinständigst, doch in deinem Beitrag - bei dem es sicherlich ganz schnell gehen musste weil der Hund raus wollte und der Bäcker gleich zumacht etc -Was noch besser währ währe der nächste älter
...
... weil am 12.10.2009 kamm ein neuer Rechner und bis dahin ..
Bei zwei Einträgen habe ich versucht die Einträge Jahr Monat und Tag herauszuziehen in Variblen zu schreiben
und die mit Größer/Kleine Gleich zu Vergleichen.
...
Und spätestens da bin ich am ende meiner Weißheit.
... die Anforderungsformulierung zu überarbeiten.
Im Groben verstehe ich die Zielrichtung (glaube ich) - aber ich hätte doch nach zwei Zeilen schon laut gerufen :
"Haben wir dafür nicht früher mal ein Multiplan oder Lotus 1-2-3 oder Excel 95 eingekauft und liegt das nicht noch in der Garage?"
WTF muss denn die "Ermittlung des nächsthöheren Folgedatums" mit Batch erfolgen -
... oder soll das irgendwo an den Rand eines bestehenden Prozesses geflanscht werden?
Grüße
Biber
Hallo mycroftone!
Unter der Annahme, dass
Wenn Du für das Format
ohnehin selbst verantwortlich bist, dann modifiziere den Batch so, dass in der Datei
steht - die Umwandlung des Datums ginge dazu etwa so:
- und das Ganze reduziert sich danach tatsächlich auf relativ wenige (und nur oberflächlich getestete) Zeilen (ich verteile nur der Übersicht wegen auf ein paar mehr davon):
Wenn das Ergebnis Deinen Intentionen entspricht, sollten die Übergabe des Stichtages per Aufrufparameter bzw Formatierung der Ausgabe dann ja nicht mehr unter "Hexerei" fallen ...
Grüße
bastla
Unter der Annahme, dass
Also wenn ich z.b. für File 1 das Datum 09.12.2009 angebe dann möchte ich das er mir sagt das der näheste Eintrag der 12.10.2209 ist.
nicht wirklich so gemeint war, sondern das Datum 03.12.2009 richtig und somit 12.10.2009 das eigentlich gesuchte vorhergehende Datum ist, könnte das wie folgt gehen:Wenn Du für das Format
Rechner1 | 00-17-A4-F6-C0-3F | 09.10.2008 |
20081009 00-17-A4-F6-C0-3F Rechner1
set "DatumNeu=%Datum:~-4%%Datum:~-7,2%%Datum:~-10,2%"
@echo off & setlocal
set "Datei=D:\File1.txt"
set "Stichtag=20091209"
set "VorLetzter="
set "Letzter="
for /f "delims=" %%i in ('sort "%Datei%"') do if "%%i" lss "%Stichtag%" (
set "VorLetzter=!Letzter!"
set "Letzter=%%i"
)
if defined VorLetzter echo Vorhergehende Daten: %VorLetzter%
if defined Letzter (
echo Letzte Daten: %Letzter%
) else (
echo Keine vor dem %Stichtag% liegenden Daten gefunden!
)
Grüße
bastla
Moin mycroftone,
wenn diese Dateien Log-Files sind wird doch immer unten dran geschrieben, dass heisst der letzte Eintrag eines Rechner1 ist der Aktuellste Eintrag des Rechner1
demnach wäre nur eine Zeile Code nötig
wenn nichts im "neuesLog.txt" ankommt dann sehn wir weiter
Ps. Deine Schreibstil ist - naja...
[Edit]ich sollte mir abgewöhnen zwischendurch andere Sachen zu machen...[/Edit]
Gruß Phil
dann möchte ich das er mir sagt das der näheste Eintrag der 12.10.2209 ist.
ist aber noch ne laaange Zeit bis dahin!wenn diese Dateien Log-Files sind wird doch immer unten dran geschrieben, dass heisst der letzte Eintrag eines Rechner1 ist der Aktuellste Eintrag des Rechner1
demnach wäre nur eine Zeile Code nötig
for %h in (20091209) do (@for /f "useback tokens=1-5 delims=|." %i in ("Logfile.txt") do @if %h leq %m%l%k (@set "LE-%i-A=%m/%l/%k - %j") else @if not defined LE-%i-B @set "LE-%i-B=%m/%l/%k - %j")&set LE-|Sort>NeuesLog.txt
wenn nichts im "neuesLog.txt" ankommt dann sehn wir weiter
Ps. Deine Schreibstil ist - naja...
[Edit]ich sollte mir abgewöhnen zwischendurch andere Sachen zu machen...[/Edit]
Gruß Phil
Hallo mycroftone!
Wenn Dir jetzt das jeweils letzte Datum vor dem Stichtag genügt, verkürzt sich der Batch sogar nochmals:
in der Variablen %Letzter% steht und somit die MAC-Adresse zB mit
(als Ersatz der oder ergänzend zur Zeile 9) ermittelt werden kann ...
Grüße
bastla
Nur die Annahe das der Suchbegriff der 3.12.2009 Richtige ist stimmt nicht ich habe extra ein Datum gewählt das nicht auch in der Datei vorhanden ist sonder ein X-Beliebiges.
Das war mir klar - nur war zunächst nach dem ersten davor liegenden Datum, und dann nach dem vorletzten gefragt - und das waren nun mal, ausgehend vom ursprünglichen 9.12., der 3.12. bzw 12.10.Wenn Dir jetzt das jeweils letzte Datum vor dem Stichtag genügt, verkürzt sich der Batch sogar nochmals:
@echo off & setlocal
set "Datei=D:\File1.txt"
set "Stichtag=20091117"
set "Letzter="
for /f "delims=" %%i in ('sort "%Datei%"') do if "%%i" lss "%Stichtag%" set "Letzter=%%i"
if defined Letzter (
echo Letzte Daten: %Letzter%
) else (
echo Keine vor dem %Stichtag% liegenden Daten gefunden!
)
Dann bekomme ich in meine Batchdatei der Wert %Stichtag% zurück
Und kann dann mit findstr "%Stichtag%" "file1" meine richtige MAC Adresse für den richtigen Zeitraum herausfiltern.
Sollte ja gar nicht mehr nötig sein, wenn Du die "file1.txt" meinem Vorschlag entsprechend erstellst, da ja dann ohnehin die gesamte Zeile, also zBUnd kann dann mit findstr "%Stichtag%" "file1" meine richtige MAC Adresse für den richtigen Zeitraum herausfiltern.
20091012 00-14-38-51-03-11 Rechner1
for /f "tokens=2" %%i in ("%Letzter%") do set "MAC=%%i"
Grüße
bastla