warzone2100
Goto Top

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 face-sad

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

Content-Key: 144046

Url: https://administrator.de/contentid/144046

Printed on: April 20, 2024 at 01:04 o'clock

Member: bastla
bastla Jun 02, 2010 at 11:52:28 (UTC)
Goto Top
Hallo Warzone2100 und willkommen im Forum!

Zum Testen (ich hab's nicht getan face-wink):
@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"  
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]
Member: Biber
Biber Jun 02, 2010 at 11:54:03 (UTC)
Goto Top
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
type e:\daily\Forum\WarZone.txt
gdg dg dgd gdg Fehler 12345 bla bla bla
Fehler 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 12345
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:
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.... ?!?.. face-wink
[/Edit]
Member: bastla
bastla Jun 02, 2010 at 11:57:46 (UTC)
Goto Top
@Biber
@bastla: Upps, mit VBS brauch man/frau ja mehrere Zeilen für diesen pilpul.... ?!?.. face-wink
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 face-wink) Zeile ließe sich das per VBS durchaus machen (aber keiner von uns möchte die sehen face-wink [Edit] falls doch, siehe unten [/Edit]) ...

Grüße
bastla
Member: Biber
Biber Jun 02, 2010 at 12:18:11 (UTC)
Goto Top
Moin bastla,

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....

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 face-wink) Zeile ließe sich das per VBS durchaus machen (aber keiner von uns möchte die sehen face-wink) ...

Bestenfalls auf einem Ultra-Wide-HDTV-Flachbildschirm.... oder einem Laufband.... oder einer Kabeltrommel aufgerollt... face-wink

Grüße zurück
Biber
Member: Warzone2100
Warzone2100 Jun 02, 2010 at 12:33:27 (UTC)
Goto Top
Uii vielen Dank.

leider sagt der mir immer ">" wäre syntaktisch an dieser stelle nicht verarbeitbar.

Liebe Grüßle
Member: bastla
bastla Jun 02, 2010 at 13:36:13 (UTC)
Goto Top
Hallo Warzone2010!
leider sagt der mir immer ">" wäre syntaktisch an dieser stelle nicht verarbeitbar.
... und das zurecht face-sad - ich korrigiere mal oben ...

Grüße
bastla
Member: bastla
bastla Jun 02, 2010 at 13:39:38 (UTC)
Goto Top
@Biber
Dann ist
setlocal enabledelayedexpansion & 
als Kommentar zu werten (immerhin gibt's bei Dir einen) ... face-wink

Grüße
bastla
Member: pieh-ejdsch
pieh-ejdsch Jun 02, 2010 at 14:08:38 (UTC)
Goto Top
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.

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.
Member: Warzone2100
Warzone2100 Jun 02, 2010 at 14:43:11 (UTC)
Goto Top
Zitat von @bastla:
Hallo Warzone2010!
> leider sagt der mir immer ">" wäre syntaktisch an dieser stelle nicht verarbeitbar.
... und das zurecht face-sad - ich korrigiere mal oben ...

Grüße
bastla

whhoohoooo super vielen dank das erleichtert mir die arbeit enorm *freu*

Vielen dank
Member: Biber
Biber Jun 02, 2010 at 14:54:25 (UTC)
Goto Top
[OT]
@ bastla
Zitat von @bastla:----
@Biber
Dann ist setlocal enabledelayedexpansion & als Kommentar zu werten
Jepp, stimmt... den brauche ich bei meiner Registry-Voreinstellung nicht... funktioniert ohne Vorankündigung.
(immerhin gibt's bei Dir einen) ... face-wink
Wer im Glashaus schrotet.. face-wink

@pieh-ejdsch
Die nächsten Oneliner sollten wir uns in einem CinemaXX/Multiplex ansehen..

Grüße
Biber
Member: bastla
bastla Jun 02, 2010 at 15:16:28 (UTC)
Goto Top
Hallo Biber und PH!
Die nächsten Oneliner sollten wir uns in einem CinemaXX/Multiplex ansehen..
Ich bring dann den mit face-wink:
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  
Grüße
bastla