Text dateien durchsuchen und 5 nachfolgene zeichen in neue datei kopieren
Hallöle,
habe nun etliches durchgelesen gesucht gefunden ausprobiert aber nichts war wirklich das was ich brauchte
ich habe ca. 8000 Textdateien die durchsucht werden wollen.
Und zwar sollen die Ergebnisse in eine neue txt Datei geschrieben werden.
Die zu durchsuchenden Dateien befinden sich alle in einem Ordner, und jedes text file beinhaltet auch irgendwo den Ausdruck "Fehler" (immer an anderer Stelle mal zwischen den Zeilen mal mitten in einer Zeile).
Nun möchte ich die Dateien so auslesen lassen, das die neue Text Datei alle Fehler ausgibt inklusive den 5 nachfolgenden Zeichen schön untereinander, so das jeder fehlercode seine eigene Zeile in der neuen Text Datei hat.
zum Beispiel:
gdg dg dgd gdg Fehler 12345 bla bla bla
Fehler 56789 gdg gd gddg bla bla
gdd gd gd gd bla bla Fehler 25689
Ausgabe Datei:
Fehler 12345
Fehler 56789
Fehler 25689
in den original Dateien kann es auch vorkommen das 2 oder 3-mal der ausdruck Fehler vorkommt mit einem Fehler Code, diese sollten natürlich auch in die neue Datei hinzukommen.
hoffe ihr versteht was ich möchte und könnt mir helfen
Vielen Dank schon einmal
Grüßle
habe nun etliches durchgelesen gesucht gefunden ausprobiert aber nichts war wirklich das was ich brauchte
ich habe ca. 8000 Textdateien die durchsucht werden wollen.
Und zwar sollen die Ergebnisse in eine neue txt Datei geschrieben werden.
Die zu durchsuchenden Dateien befinden sich alle in einem Ordner, und jedes text file beinhaltet auch irgendwo den Ausdruck "Fehler" (immer an anderer Stelle mal zwischen den Zeilen mal mitten in einer Zeile).
Nun möchte ich die Dateien so auslesen lassen, das die neue Text Datei alle Fehler ausgibt inklusive den 5 nachfolgenden Zeichen schön untereinander, so das jeder fehlercode seine eigene Zeile in der neuen Text Datei hat.
zum Beispiel:
gdg dg dgd gdg Fehler 12345 bla bla bla
Fehler 56789 gdg gd gddg bla bla
gdd gd gd gd bla bla Fehler 25689
Ausgabe Datei:
Fehler 12345
Fehler 56789
Fehler 25689
in den original Dateien kann es auch vorkommen das 2 oder 3-mal der ausdruck Fehler vorkommt mit einem Fehler Code, diese sollten natürlich auch in die neue Datei hinzukommen.
hoffe ihr versteht was ich möchte und könnt mir helfen
Vielen Dank schon einmal
Grüßle
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 144046
Url: https://administrator.de/forum/text-dateien-durchsuchen-und-5-nachfolgene-zeichen-in-neue-datei-kopieren-144046.html
Ausgedruckt am: 15.04.2025 um 19:04 Uhr
11 Kommentare
Neuester Kommentar
Hallo Warzone2100 und willkommen im Forum!
Zum Testen (ich hab's nicht getan
):
Dein Beispiel lässt vermuten, dass 6 nachfolgende Zeichen auszugeben sind (das Leerzeichen kann nicht ignoriert werden) - falls doch nicht, einfach in der letzten Batchzeile korrigieren ...
Grüße
bastla
[Edit] Fehlende Maskierung für "<>" ergänzt [/Edit]
Zum Testen (ich hab's nicht getan
@echo off & setlocal
set "Dateien=D:\Ordner mit 8000 Dateien\*.txt"
set "Liste=D:\Fehlerliste.txt"
set "Suche=Fehler"
set F=%temp%\Filtern.vbs
>%F% echo E=Split(CreateObject("Scripting.FileSystemObject").OpenTextFile(WScript.Arguments(0)).ReadAll,"%Suche%")
>>%F% echo For i=0 To UBound(E):If E(i)^<^>"" Then:WScript.Echo "%Suche%"^&Left(E(i),6):End If:Next
del "%Liste%" 2>nul
for %%i in ("%Dateien%") do >>"%Liste%" cscript //nologo %F% "%%i"
Grüße
bastla
[Edit] Fehlende Maskierung für "<>" ergänzt [/Edit]
Moin Warzone2100,
willkommen im Forum.
Du kannst diese Aufgabe einfach durch einen Oneliner vom CMD-Prompt aus lösen... es lohnt sich ja kaum, sich dafür aufwändig einen Batchdateinamen auszudenken und zu merken.
Beispiel am CMD-Prompt:
<code plain>
-- meine Beispieldatei von oben gecopy&pasted
Fehler 56789 gdg gd gddg bla bla
gdd gd gd gd bla bla Fehler 25689
(=13:37:56 D:\temp=)
Fehler 56789
Fehler 25689
Für mehrere Dateien kannst du dann der Eine-Datei-Angabe "e:\daily\forum\warzone.txt" in meinem Beispiel statt dessen in die Klammer setzen:
Streiche für Massenverarbeitung:
...zumindest sinngemäß, wenn die Dateien mit den Fehlermeldungen alle "warzonXyz123" oder ähnlich als Namenskonvention hätten.
Grüße
Biber
[Edit] Biber grüßt auch mittwochs alle Rechtsüberholer... *winkzzz*
@bastla: Upps, mit VBS brauch man/frau ja mehrere Zeilen für diesen pilpul.... ?!?..
[/Edit]
willkommen im Forum.
Du kannst diese Aufgabe einfach durch einen Oneliner vom CMD-Prompt aus lösen... es lohnt sich ja kaum, sich dafür aufwändig einen Batchdateinamen auszudenken und zu merken.
Beispiel am CMD-Prompt:
<code plain>
-- meine Beispieldatei von oben gecopy&pasted
type e:\daily\Forum\WarZone.txt
gdg dg dgd gdg Fehler 12345 bla bla blaFehler 56789 gdg gd gddg bla bla
gdd gd gd gd bla bla Fehler 25689
(=13:37:56 D:\temp=)
setlocal enabledelayedexpansion & (for /f "delims=" %i in (e:\daily\forum\warzone.txt) do @set "x=%i" & for /f "tokens=1,2" %a in ("!x:*Fehler=Fehler!") do @echo %a %b)
Fehler 12345Fehler 56789
Fehler 25689
Für mehrere Dateien kannst du dann der Eine-Datei-Angabe "e:\daily\forum\warzone.txt" in meinem Beispiel statt dessen in die Klammer setzen:
Streiche für Massenverarbeitung:
FOR /F "delims=" %i in (e:\daily\forum\warzone.txt) DO...
Setze für Massenverarbeitung:FOR /F "delims=" %i in ('type e:\daily\forum\warzon*.txt') DO...
...zumindest sinngemäß, wenn die Dateien mit den Fehlermeldungen alle "warzonXyz123" oder ähnlich als Namenskonvention hätten.
Grüße
Biber
[Edit] Biber grüßt auch mittwochs alle Rechtsüberholer... *winkzzz*
@bastla: Upps, mit VBS brauch man/frau ja mehrere Zeilen für diesen pilpul.... ?!?..
[/Edit]
@Biber
Der Oneliner setzt aber eigentlich voraus, dass "delayedExpansion" schon defaultmäßig aktiviert ist (zumindest genügt das "&" bei mir unter XP SP3 nicht, um in der Schleife bereits
... aber in einer (etwas längeren
) Zeile ließe sich das per VBS durchaus machen (aber keiner von uns möchte die sehen
[Edit] falls doch, siehe unten [/Edit]) ...
Grüße
bastla
Der Oneliner setzt aber eigentlich voraus, dass "delayedExpansion" schon defaultmäßig aktiviert ist (zumindest genügt das "&" bei mir unter XP SP3 nicht, um in der Schleife bereits
!x!
nutzen zu können) ...... aber in einer (etwas längeren
Grüße
bastla
Moin bastla,
Also gut, in der Registry sollte es so aussehen.
<code plain>
! REG.EXE VERSION 3.0
HKEY_CURRENT_USER\software\microsoft\Command Processor
CompletionChar REG_DWORD 0x9
DefaultColor REG_DWORD 0x74
EnableExtensions REG_DWORD 0x1
PathCompletionChar REG_DWORD 0x9
DisableUNCCheck REG_DWORD 0x1
DelayedExpansion REG_DWORD 0x1 <--------- DER HIER ist gemeint!
AutoRun REG_SZ D:\Biber\cmdstartup.bat
Bestenfalls auf einem Ultra-Wide-HDTV-Flachbildschirm.... oder einem Laufband.... oder einer Kabeltrommel aufgerollt...
Grüße zurück
Biber
Zitat von @bastla:
@Biber
Der Oneliner setzt aber eigentlich voraus, dass "delayedExpansion" schon defaultmäßig aktiviert ist ...
Jepp, natürlich .... aber wir sind doch auch nicht bei der Computerbild oder auf dem Ponyhof....@Biber
Der Oneliner setzt aber eigentlich voraus, dass "delayedExpansion" schon defaultmäßig aktiviert ist ...
Also gut, in der Registry sollte es so aussehen.
<code plain>
reg query "HKCU\software\microsoft\Command Processor"
! REG.EXE VERSION 3.0
HKEY_CURRENT_USER\software\microsoft\Command Processor
CompletionChar REG_DWORD 0x9
DefaultColor REG_DWORD 0x74
EnableExtensions REG_DWORD 0x1
PathCompletionChar REG_DWORD 0x9
DisableUNCCheck REG_DWORD 0x1
DelayedExpansion REG_DWORD 0x1 <--------- DER HIER ist gemeint!
AutoRun REG_SZ D:\Biber\cmdstartup.bat
... aber in einer (etwas längeren
) Zeile ließe sich das per VBS durchaus machen (aber keiner von uns möchte die sehen
) ...
Bestenfalls auf einem Ultra-Wide-HDTV-Flachbildschirm.... oder einem Laufband.... oder einer Kabeltrommel aufgerollt...
Grüße zurück
Biber
@Biber
Dann ist
als Kommentar zu werten (immerhin gibt's bei Dir einen) ... 
Grüße
bastla
Dann ist
setlocal enabledelayedexpansion &
Grüße
bastla
Moin,
Falls in einer Zeile Mehrmals Fehler vorkommt und in anderen gar nicht, muss der Einzeiler für CMD Fenster ein bisschen modifiziert werden.
CMD Fenster mit cmd /v:on starten schaltet auch Verzögerte Variablen Auflösung ein.
"e:\daily\forum\warzone.txt" ist Deine Textdatei bzw mit Platzhalter ? oder * für mehrere.
Falls in einer Zeile Mehrmals Fehler vorkommt und in anderen gar nicht, muss der Einzeiler für CMD Fenster ein bisschen modifiziert werden.
CMD Fenster mit cmd /v:on starten schaltet auch Verzögerte Variablen Auflösung ein.
setlocal enabledelayedexpansion & (for /f "delims=" %i in ('findstr "Fehler" "e:\daily\forum\warzone.txt"') do @set "x=%i" & @for %a in ("!x:Fehler =Fehler_!") do @for %j in (%~a) do @for /f "tokens=1,2 delims=_" %k in ("%j") do @if not ""=="%l" echo %k %l)
"e:\daily\forum\warzone.txt" ist Deine Textdatei bzw mit Platzhalter ? oder * für mehrere.
[OT]
@ bastla
Jepp, stimmt... den brauche ich bei meiner Registry-Voreinstellung nicht... funktioniert ohne Vorankündigung.

@pieh-ejdsch
Die nächsten Oneliner sollten wir uns in einem CinemaXX/Multiplex ansehen..
Grüße
Biber
@ bastla
Jepp, stimmt... den brauche ich bei meiner Registry-Voreinstellung nicht... funktioniert ohne Vorankündigung.
(immerhin gibt's bei Dir einen) ... 
Wer im Glashaus schrotet.. @pieh-ejdsch
Die nächsten Oneliner sollten wir uns in einem CinemaXX/Multiplex ansehen..
Grüße
Biber
Hallo Biber und PH!
:
Grüße
bastla
Die nächsten Oneliner sollten wir uns in einem CinemaXX/Multiplex ansehen..
Ich bring dann den mit Set fso=CreateObject("Scripting.FileSystemObject"):Set L=fso.CreateTextFile("D:\Fehler.txt"):For Each F In fso.GetFolder("e:\daily\forum").Files:For Each E In Split(F.OpenAsTextStream.ReadAll,"Fehler"):If E<>"" Then:L.WriteLine "Fehler"&Left(E,6):End If:Next:Next
bastla