Batch: Durchsuche .txt nach unterschiedlichen Strings - wenn gefunden mache was
Hallo Forengemeinde,
auf der Suche nach einer Lösung für mein Problem bin ich über dieses Forum gestolpert. Ich habe schon einiges zu Batch gelesen, aber da ich das noch nie gemacht habe bin ich daraus nur bedingt schlauer geworden.
Ich benötige eine Batch die eine "möglicheFehler.txt"-Datei einliest in die ich mögliche Fehlermeldunge von Hand zeilenweise eintrage. Anschließend soll die Batch in einer anderen .txt mit dem Namen "Error.log" ständig nach diesen Fehlern suchen. Wenn ein Fehler gefunden wurde benötige ich eine visuelle (z.B. ein DOS-Fenster mit dem Namen des gefundenen Fehlers ) und eine akustische (z.B. ein PC-Beep) Ausgabe.
Etwas ist noch wichtig, wenn ein Fehler gefunden wurde soll die Batch pausieren. Manchmal kommen nämlich ein Haufen Fehler hinter einander und dann wäre der Monitor voller DOS-Fenster und es würde ständig piepen.
Ich bin kein Admin sondern nur Nutzer von Maschinen die per Windows überwacht werden. Diese Maschinen arbeiten voll automatisch - außer es geht eben etwas schief. Da es sehr anstrengend und zeitaufwendig ist ständig auf den Monitor zu schauen und zu warten bis was schief geht wollte ich Fragen ob Ihr mir helfen könnt.
Danke und Gruß
Paul
auf der Suche nach einer Lösung für mein Problem bin ich über dieses Forum gestolpert. Ich habe schon einiges zu Batch gelesen, aber da ich das noch nie gemacht habe bin ich daraus nur bedingt schlauer geworden.
Ich benötige eine Batch die eine "möglicheFehler.txt"-Datei einliest in die ich mögliche Fehlermeldunge von Hand zeilenweise eintrage. Anschließend soll die Batch in einer anderen .txt mit dem Namen "Error.log" ständig nach diesen Fehlern suchen. Wenn ein Fehler gefunden wurde benötige ich eine visuelle (z.B. ein DOS-Fenster mit dem Namen des gefundenen Fehlers ) und eine akustische (z.B. ein PC-Beep) Ausgabe.
Etwas ist noch wichtig, wenn ein Fehler gefunden wurde soll die Batch pausieren. Manchmal kommen nämlich ein Haufen Fehler hinter einander und dann wäre der Monitor voller DOS-Fenster und es würde ständig piepen.
Ich bin kein Admin sondern nur Nutzer von Maschinen die per Windows überwacht werden. Diese Maschinen arbeiten voll automatisch - außer es geht eben etwas schief. Da es sehr anstrengend und zeitaufwendig ist ständig auf den Monitor zu schauen und zu warten bis was schief geht wollte ich Fragen ob Ihr mir helfen könnt.
Danke und Gruß
Paul
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 281866
Url: https://administrator.de/forum/batch-durchsuche-txt-nach-unterschiedlichen-strings-wenn-gefunden-mache-was-281866.html
Ausgedruckt am: 28.04.2025 um 10:04 Uhr
6 Kommentare
Neuester Kommentar
- Können auch während das Skript läuft neue Einträge der Datei möglicheFehler.txt hinzugefügt werden?
- Was machst du, nachdem das Skript einen Fehler in Error.log gefunden hat?. Löscht du den Eintrag dann wieder aus der Log raus ? Sonst würde das Skript danach dauernd an dieser Stelle hängenbleiben...
- Was machst du, nachdem das Skript einen Fehler in Error.log gefunden hat?. Löscht du den Eintrag dann wieder aus der Log raus ? Sonst würde das Skript danach dauernd an dieser Stelle hängenbleiben...
Ok, hab jetzt einfach mal ein kleines PowerShell-Skript reingehauen. Die Pfade sind natürlich noch anzupassen.
Wenn du während das Skript läuft, die moeglicheFehler.txt um Einträge erweitern willst, musst du die Zeile
$fehler = Get-Content $fehlerListenPath in die while Schleife verschieben, unter die Zeile
$logInhalt = Get-Content $errorLogPath.
Wenn der Fehler natürlich dann nicht erst aus der .log gelöscht wird, wird dieser immer wieder gefunden.
Wenn du während das Skript läuft, die moeglicheFehler.txt um Einträge erweitern willst, musst du die Zeile
$fehler = Get-Content $fehlerListenPath in die while Schleife verschieben, unter die Zeile
$logInhalt = Get-Content $errorLogPath.
Wenn der Fehler natürlich dann nicht erst aus der .log gelöscht wird, wird dieser immer wieder gefunden.
# Assembly fuer MessageBox
[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") | Out-Null
# Variablen
$fehlerListenPath = "C:\..\möglicheFehler.txt"
$errorLogPath = "C:\..\Error.log"
# Programm
$fehler = Get-Content $fehlerListenPath
while($true) {
$logInhalt = Get-Content $errorLogPath
$fehler | foreach {
if($logInhalt -match $_) {
[System.Console]::Beep(1000,600)
[System.Windows.Forms.MessageBox]::Show("$_" , "Fehler")
}
Start-Sleep -s 3
}
}

Moin Paul,
probier mal das
Gruß jodel32
probier mal das
@echo off
set "errorcodes=C:\moeglicheFehler.txt"
set "errorlog=C:\Error.log"
set "tmp=%temp%\Error.log"
set wait=10
:START
del "%tmp%" >nul 2>&1
for /f "usebackq tokens=* delims=" %%a in ("%errorcodes%") DO @(
findstr /ic:"%%a" "%errorlog%">nul && (
@echo
echo Fehler '%%a' aufgetreten
findstr /ivc:"%%a" "%errorlog%">"%tmp%"
pause
)
)
move "%tmp%" "%errorlog%" >nul 2>&1
cls
echo Warte auf Fehler ...
ping -n %wait% localhost >nul
goto START