verschachtelte for-Schleife oder bessere Idee gesucht
Hallo zusammen!
Ich komme hier einfach nicht weiter und bitte um die Hilfe der batch-Gurus im Forum.
Folgendes ist gegeben:
- ein Verzeichnis mit diversen (sich laufend namentlich ändernden) Logdatein, z.B. log_server_0190.txt, log_server_0191.txt, usw.
- im LOG ist folgender Inhalt (Beispielzeile): Jobdescription#Datenbankwartung
Was soll passieren:
Die Werte der LOGs (z.B. Jobdescription) sollen nun EINZELN als echo an eine Monitoringlösung übergeben werden.
EINZELN bedeutet nicht mit einer for-Schleife eine nach der anderen in einem Job. Sondern der Wert des ältestens LOG-Files, dann sofort Ende.
Folgende Kriterien sollen per Batch abgefragt werden:
- liste alle LOGs auf ('dir /-D /B /O-D LOG*.txt')
- aus dieser Liste durchsuche alle LOGs nach einem bestimmten Eintrag (findstr /M /C:Datenbankwartung LOG*.txt)
- aus dieser Liste suche mir das älteste LOG raus, das NICHT "TransferedDatenbankwartung" beinhaltet (fgrep -i TransferedDatenbankwartung -L LOG*.txt)
- gib den Wert Datenbankwartung per Batch aus (for /f "tokens=2 delims=#" %%i in ('type "%logfile%" ^| findstr /B Jobdescription') do echo %%i
- schreibe ans Ende dieser Datei nun TransferedJobdescription (@echo TransferedJobdescription>>%logfile%)
Damit erreiche ich, dass mir das älteste LOG, das NICHT TransferedBla enthält ausgelesen wird (echo-Ausgabe) und anschließend der TransferedBla reingeschrieben wird. Beim nächsten Turnus wird diese Datei nicht mehr angefasst, weil TransferedBla drin ist, es folgt die nächst älteste aus dem Sammelsorium der LOGs.
Nur wie lassen sich nun die Einzelnbausteine in einen batch schmeißen?
Wissende vor!
LG,
Markus.
Ich komme hier einfach nicht weiter und bitte um die Hilfe der batch-Gurus im Forum.
Folgendes ist gegeben:
- ein Verzeichnis mit diversen (sich laufend namentlich ändernden) Logdatein, z.B. log_server_0190.txt, log_server_0191.txt, usw.
- im LOG ist folgender Inhalt (Beispielzeile): Jobdescription#Datenbankwartung
Was soll passieren:
Die Werte der LOGs (z.B. Jobdescription) sollen nun EINZELN als echo an eine Monitoringlösung übergeben werden.
EINZELN bedeutet nicht mit einer for-Schleife eine nach der anderen in einem Job. Sondern der Wert des ältestens LOG-Files, dann sofort Ende.
Folgende Kriterien sollen per Batch abgefragt werden:
- liste alle LOGs auf ('dir /-D /B /O-D LOG*.txt')
- aus dieser Liste durchsuche alle LOGs nach einem bestimmten Eintrag (findstr /M /C:Datenbankwartung LOG*.txt)
- aus dieser Liste suche mir das älteste LOG raus, das NICHT "TransferedDatenbankwartung" beinhaltet (fgrep -i TransferedDatenbankwartung -L LOG*.txt)
- gib den Wert Datenbankwartung per Batch aus (for /f "tokens=2 delims=#" %%i in ('type "%logfile%" ^| findstr /B Jobdescription') do echo %%i
- schreibe ans Ende dieser Datei nun TransferedJobdescription (@echo TransferedJobdescription>>%logfile%)
Damit erreiche ich, dass mir das älteste LOG, das NICHT TransferedBla enthält ausgelesen wird (echo-Ausgabe) und anschließend der TransferedBla reingeschrieben wird. Beim nächsten Turnus wird diese Datei nicht mehr angefasst, weil TransferedBla drin ist, es folgt die nächst älteste aus dem Sammelsorium der LOGs.
Nur wie lassen sich nun die Einzelnbausteine in einen batch schmeißen?
Wissende vor!
LG,
Markus.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 113828
Url: https://administrator.de/contentid/113828
Ausgedruckt am: 23.11.2024 um 08:11 Uhr
6 Kommentare
Neuester Kommentar
Hallo InTreaTer!
Bis sich der nächste Guru hier einfindet könntest Du folgendes testen:
Grüße
bastla
[Edit] Ausgabe der "Jobdescription" nachgereicht [/Edit]
[Edit2] Verwendung der Variablen %Ausschluss% in Zeile 12 und Rechtschreibkorrektur des Inhaltes dieser Variablen in Zeile 5 [/Edit2]
Bis sich der nächste Guru hier einfindet könntest Du folgendes testen:
@echo off & setlocal
set "Verz=D:\Logs"
set "Maske=Log*.txt"
set "Suche=Datenbankwartung"
set "Ausschluss=TransferredJobdescription"
pushd "%Verz%"
set "Datei="
for /f "delims=" %%i in ('dir /b /a-d /od "%Maske%"') do if not defined Datei findstr /c:"%Suche%" "%%i">nul && findstr /c:"%Ausschluss%" "%%i">nul || set "Datei=%%i"
if defined Datei (
for /f "tokens=2 delims=#" %%i in ('findstr /B "Jobdescription" "%Datei%"') do echo %%i
echo %Ausschluss%>>"%Datei%"
)
popd
bastla
[Edit] Ausgabe der "Jobdescription" nachgereicht [/Edit]
[Edit2] Verwendung der Variablen %Ausschluss% in Zeile 12 und Rechtschreibkorrektur des Inhaltes dieser Variablen in Zeile 5 [/Edit2]
<OT>
Moin inTreaTer,
keinerlei inhaltliche Ergänzungen, aber (weil es so im Auge brennt beim Lesen):
Zumindest dort in Zeile 12 , wo bastla es ja jetzt neu schreibt könnte doch Beginn einer sanften Korrektur werden.
Liest sich ja sonst wie "Farad Valai"
( beabsichtlgter Werbegag-Rechtschreibfehler eines Fahrrad-Verleihs, gesehen in Nordhessen)
</OT>
Grüße
Biber
Moin inTreaTer,
keinerlei inhaltliche Ergänzungen, aber (weil es so im Auge brennt beim Lesen):
- deutsch-denglische Wortgebilde wie "TransferedDatenbankwartung" sind ja schon Highlights (oder wie ihr sagen würdet "Highlichter"), mit denen jeder Jobvermittler Appetit auf einen unserer Arbeitsplätze machen könnte
- aber der professional tatsch, wie der Dengländer es bezeichnet, geht absolut verloren, wenn dort immer TransferedBla statt TransferredBla steht.
Zumindest dort in Zeile 12 , wo bastla es ja jetzt neu schreibt könnte doch Beginn einer sanften Korrektur werden.
Liest sich ja sonst wie "Farad Valai"
( beabsichtlgter Werbegag-Rechtschreibfehler eines Fahrrad-Verleihs, gesehen in Nordhessen)
</OT>
Grüße
Biber
@Biber
Schuldig im Sinne der Anklage - das fehlende "r" habe ich tatsächlich beim Kopieren übersehen, und in Zeile 12 muss natürlich die Variable hin - ist oben geändert ...
Grüße
bastla
Schuldig im Sinne der Anklage - das fehlende "r" habe ich tatsächlich beim Kopieren übersehen, und in Zeile 12 muss natürlich die Variable hin - ist oben geändert ...
Grüße
bastla
Hallo InTreaTer!
Zunächst nur eine Nachbesserung meines obigen Scripts - da fehlten in Zeile 9 einige Klammern. So sollte es funktionieren:
Grüße
bastla
P.S.: Für mehr ist es heute schon zu spät (bzw noch zu früh ) ...
Zunächst nur eine Nachbesserung meines obigen Scripts - da fehlten in Zeile 9 einige Klammern. So sollte es funktionieren:
for /f "delims=" %%i in ('dir /b /a-d /od "%Maske%"') do if not defined Datei (findstr /c:"%Suche%" "%%i">nul && (findstr /c:"%Ausschluss%" "%%i">nul || set "Datei=%%i" ))
bastla
P.S.: Für mehr ist es heute schon zu spät (bzw noch zu früh ) ...