Suchen von Strings mit von Batch files
Hallo,
habe folgendes Problem:
habe 2 log files.
In der ersten stehen Uhrzeiten:
00:00:00
00:01:00
00:02:00
00:03:00
23:59:00
in dem 2. Log file stehen diese Urzeit mit anderen Infos öfters hintereinander.
Nun möcht ich gern ein Batch file, das mir zu jeder Uhrzeit im 1. file die Anzahl der Zeilen mit dieser Zeit im 2. file anzeigt!
Habe das schon irgendwie mit dem "find" Befehl probiert, doch der lässt mich keine Variablen anstatt des Strings angeben!
Hat irgendwer eine Idee?
Danke!
habe folgendes Problem:
habe 2 log files.
In der ersten stehen Uhrzeiten:
00:00:00
00:01:00
00:02:00
00:03:00
23:59:00
in dem 2. Log file stehen diese Urzeit mit anderen Infos öfters hintereinander.
Nun möcht ich gern ein Batch file, das mir zu jeder Uhrzeit im 1. file die Anzahl der Zeilen mit dieser Zeit im 2. file anzeigt!
Habe das schon irgendwie mit dem "find" Befehl probiert, doch der lässt mich keine Variablen anstatt des Strings angeben!
Hat irgendwer eine Idee?
Danke!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 94021
Url: https://administrator.de/contentid/94021
Ausgedruckt am: 24.11.2024 um 18:11 Uhr
6 Kommentare
Neuester Kommentar
Hallo sevi130888 und willkommen im Forum!
Versuch es so:
Grüße
bastla
Versuch es so:
@echo off & setlocal enabledelayedexpansion
set "Zeiten=D:\Zeiten.txt"
set "Log=D:\LogFile.txt"
for /f "usebackq delims=" %%i in ("%Zeiten%") do (
set /a Anzahl=0
for /f %%a in ('findstr /c:"%%i" "%Log%"') do set /a Anzahl+=1
echo %%i: !Anzahl!
)
bastla
Hallo sevi130888!
Der Ordnung halber vorweg: Die Onlinehilfe kannst Du jeweils mit "Befehl /?" (also etwa "for /?") von der Kommandozeile aufrufen ...
Die "verzögerte Variablenauflösung" ("delayedExpansion") wird benötigt, um innerhalb der Schleife auf den jeweils aktuellen Wert der Variablen %Anzahl% (dann geschrieben als !Anzahl!) zugreifen zu können.
No comment
Schleife, um alle Zeilen der Zeiten-Tabelle einzeln in der Variable %%i zu erhalten.
"usebackq" erlaubt es, den Dateinamen/-pfad (in der Variablen %Zeiten%) unter Anführungszeichen angeben zu können - nur für den Fall, dass dieser bei Dir Leerzeichen enthielte.
"delims=" legt fest, dass es keine Trennzeichen (zur Aufteilung der Zeile in einzelne "tokens") gibt - daher wird %%i jeweils die gesamte Zeile enthalten.
Rücksetzen des Zählers für Fundstellen (das "/a" ist eigentlich nicht nötig - ich verwende es, um sozusagen den "Datentyp" der Variablen - "numerisch" - anzuzeigen).
Schleife über alle Zeilen, welche %%i (die vorhin ausgelesene Uhrzeit) enthalten - verantwortlich dafür, dass nur "passende" Zeilen in der Schleife verwendet werden, ist "findstr" mit dem Suchbegriff "Uhrzeit" (%%i).
Da die Daten selbst nicht weiter interessieren, muss bei der "for"-Schleife weder für "tokens" noch für "delims" eine Einstellung vorgenommen werden.
Die Schleife wird für jede gefundene Zeile durchlaufen - daher kann mit "set /a Anzahl+=1" (als Kurzfassung für "set /a Anzahl=%Anzahl%+1", oder hier eigentlich "set /a Anzahl=!Anzahl!+1") jeweils der "Zählerstand" in der Variablen %Anzahl% (bzw !Anzahl!) erhöht werden. Hier ist "/a" wichtig, damit eine arithmetische Operation vorgenommen wird.
Ausgabe der Uhrzeit und der Anzahl der Fundstellen und Ende der Schleife - um bereits innerhalb der Schleife den jeweils aktuellen Wert der Variablen %Anzahl% lesen (ausgeben) zu können, wird die oben angesprochene "verzögerte Variablenauflösung" benötigt, und deshalb auch die geänderte Schreibweise !Anzahl!.
Grüße
bastla
Der Ordnung halber vorweg: Die Onlinehilfe kannst Du jeweils mit "Befehl /?" (also etwa "for /?") von der Kommandozeile aufrufen ...
@echo off & setlocal enabledelayedexpansion
set "Zeiten=D:\Zeiten.txt"
set "Log=D:\LogFile.txt"
for /f "usebackq delims=" %%i in ("%Zeiten%") do (
"usebackq" erlaubt es, den Dateinamen/-pfad (in der Variablen %Zeiten%) unter Anführungszeichen angeben zu können - nur für den Fall, dass dieser bei Dir Leerzeichen enthielte.
"delims=" legt fest, dass es keine Trennzeichen (zur Aufteilung der Zeile in einzelne "tokens") gibt - daher wird %%i jeweils die gesamte Zeile enthalten.
set /a Anzahl=0
for /f %%a in ('findstr /c:"%%i" "%Log%"') do set /a Anzahl+=1
Da die Daten selbst nicht weiter interessieren, muss bei der "for"-Schleife weder für "tokens" noch für "delims" eine Einstellung vorgenommen werden.
Die Schleife wird für jede gefundene Zeile durchlaufen - daher kann mit "set /a Anzahl+=1" (als Kurzfassung für "set /a Anzahl=%Anzahl%+1", oder hier eigentlich "set /a Anzahl=!Anzahl!+1") jeweils der "Zählerstand" in der Variablen %Anzahl% (bzw !Anzahl!) erhöht werden. Hier ist "/a" wichtig, damit eine arithmetische Operation vorgenommen wird.
echo %%i: !Anzahl!
)
Grüße
bastla
Moin bastla,
ich hätte sehr gerne Deinen Schnipsel und Deinen erläuternden Kommentar noch einmal im Stück als Tutorial im Bereich "Batch & Shell" mit der (sinngemäßen) Überschrift "Beispielbatch: Zusammenfassung von Logfile-Ereignissen nach Zeiten" (oder so ähnlich).
Lässt sich das machen?
Wäre doch schade, wenn dieser Beitrag hier unterginge...
Grüße
Biber
[Edit] Tutorial siehe Kommentiertes Batch-Beispiel - Auswertung von Logdateien nach Zeiten
ich hätte sehr gerne Deinen Schnipsel und Deinen erläuternden Kommentar noch einmal im Stück als Tutorial im Bereich "Batch & Shell" mit der (sinngemäßen) Überschrift "Beispielbatch: Zusammenfassung von Logfile-Ereignissen nach Zeiten" (oder so ähnlich).
Lässt sich das machen?
Wäre doch schade, wenn dieser Beitrag hier unterginge...
Grüße
Biber
[Edit] Tutorial siehe Kommentiertes Batch-Beispiel - Auswertung von Logdateien nach Zeiten