Zeichenkette in allen Textdateien in einem Ordner suchen und ab der nächsten Zeile den Restinhalt in eine summe.out Datei umleiten mittels Batch unter Win Vista
Hallo zusammen,
ich habe folgendes Problem:
Ich habe -n viele Textdateien die verschiedenen "Bereichen" zugeordnet werden können.
Die Textdateien liegen alle in EINEM Ordner.
Ich möchte nun in jede TXT Datei "hinein" schauen und wenn der gesuchte Text in dieser Datei
steht soll ab der nächsten Zeile der restliche Text in eine XXX.out Datei umgeleitet werden.
Beispiel Text einer solche TXT:
Suchtext= "checked"
@;002097777;149807;07082010;TMS:no read;SSD:no read;1-7m;Place3(06:48:53)
Read Barcode=1(1,1)
PIN lenght checked=0(1,1)
R103=4.018(3.000,6.000)kohm
R107=9.933(9.800,10.200)kohm
R108=0.990(0.980,1.020)kohm
R109=99.764(98.000,102.000)ohm
R112=0.994(0.950,1.050)Mkohm
R113=99.915(95.000,105.000)kohm
R114=99.574(98.000,102.000)kohm
R115=1.005(0.980,1.020)kohm
R116=19.824(19.600,20.400)kohm
R140=9.928(9.400,10.600)kohm
R142=0.000(9.800,10.200)kohm
R143=17.946(17.640,18.360)kohm
R145=99.466(98.000,102.000)kohm
R146=46.819(46.060,47.940)kohm
R148=99.890(98.000,102.000)kohm
Hier soll also der Text ab R103... in die XXX.out angehängt werden.
Danke vorab
ich habe folgendes Problem:
Ich habe -n viele Textdateien die verschiedenen "Bereichen" zugeordnet werden können.
Die Textdateien liegen alle in EINEM Ordner.
Ich möchte nun in jede TXT Datei "hinein" schauen und wenn der gesuchte Text in dieser Datei
steht soll ab der nächsten Zeile der restliche Text in eine XXX.out Datei umgeleitet werden.
Beispiel Text einer solche TXT:
Suchtext= "checked"
@;002097777;149807;07082010;TMS:no read;SSD:no read;1-7m;Place3(06:48:53)
Read Barcode=1(1,1)
PIN lenght checked=0(1,1)
R103=4.018(3.000,6.000)kohm
R107=9.933(9.800,10.200)kohm
R108=0.990(0.980,1.020)kohm
R109=99.764(98.000,102.000)ohm
R112=0.994(0.950,1.050)Mkohm
R113=99.915(95.000,105.000)kohm
R114=99.574(98.000,102.000)kohm
R115=1.005(0.980,1.020)kohm
R116=19.824(19.600,20.400)kohm
R140=9.928(9.400,10.600)kohm
R142=0.000(9.800,10.200)kohm
R143=17.946(17.640,18.360)kohm
R145=99.466(98.000,102.000)kohm
R146=46.819(46.060,47.940)kohm
R148=99.890(98.000,102.000)kohm
Hier soll also der Text ab R103... in die XXX.out angehängt werden.
Danke vorab
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 172830
Url: https://administrator.de/forum/zeichenkette-in-allen-textdateien-in-einem-ordner-suchen-und-ab-der-naechsten-zeile-den-restinhalt-in-eine-172830.html
Ausgedruckt am: 23.04.2025 um 21:04 Uhr
13 Kommentare
Neuester Kommentar
Hallo tueftler und willkommen im Forum!
Wenn ich das richtig verstehe (nur eine Zeile mit dem Suchwort je Datei, alle Ergebnisse in die Sammeldatei "XXX.out"), sollte eigentlich eine Zeile der Art
genügen (Beispiel für die Direkteingabe in der CMD-Shell; als Batch jeweils %%i und %%j) ...
Ansonsten solltest Du Dir auch noch T-Mos Zusatzfragen 2 und 3 überlegen ...
Grüße
bastla
[Edit] Beispielpfade hinzugefügt [/Edit]
[Edit2] Beispielpfade teilweise wieder entfernt (da kontraproduktiv) [/Edit2]
Wenn ich das richtig verstehe (nur eine Zeile mit dem Suchwort je Datei, alle Ergebnisse in die Sammeldatei "XXX.out"), sollte eigentlich eine Zeile der Art
for /f "tokens=1-2 delims=:" %i in ('findstr /n "checked" *.txt') do more +%j "%i">>"D:\Sammel\XXX.out"
Ansonsten solltest Du Dir auch noch T-Mos Zusatzfragen 2 und 3 überlegen ...
Grüße
bastla
[Edit] Beispielpfade hinzugefügt [/Edit]
[Edit2] Beispielpfade teilweise wieder entfernt (da kontraproduktiv) [/Edit2]

moin und willkommen,
nunja du hast hierher gefunden und auch schon den Bereich Batch ausgesucht.
Die Frage(n)istsind also:
gruß
nunja du hast hierher gefunden und auch schon den Bereich Batch ausgesucht.
Die Frage(n)
- Wie weit bist du?
- einmalig oder immer und immer wieder?
- Wie soll verhindert werden, dass eine bereits durchgesuchte Datei erneut durchgekaspert wird?
- was genau versteckt sich hinter :
der restliche Text in eine XXX.out Datei umgeleitet werden.
gruß

Servus,
woher ihr immer dieses
@echo off nehmt - würd ich wirklich gerne mal wissen wollen.....
Früher hätte ich sinngemäß geschrieben - noch keine Haare am S...zensiert, aber im Bordell vordrängeln 
Im Prinzip hat der Bastla ja dein Problem Works as Designed und meine Frage bezog sich auch auf ist in eine XXX.out Datei umgeleitet werden wortwörtlich so gemeint - wenn ja - Schau dir des Bastlas Demo für die cmd an.
Gruß
woher ihr immer dieses
@echo off nehmt - würd ich wirklich gerne mal wissen wollen.....
Früher hätte ich sinngemäß geschrieben - noch keine Haare am S...
- scnr - ist nicht persönlich, eher grundsätzlich.
Im Prinzip hat der Bastla ja dein Problem Works as Designed und meine Frage bezog sich auch auf ist in eine XXX.out Datei umgeleitet werden wortwörtlich so gemeint - wenn ja - Schau dir des Bastlas Demo für die cmd an.
Gruß
Hallo tueftler!
Den Quelltext kannst Du mit den Tags
Deine Beispieldaten für "Vorher" und "Nachher" passen für mich nicht zusammen (und ein "LABELTABLE" habe ich auch vergeblich gesucht) ...
... ansonsten wäre folgender (ungetesteter) Code zwar vermutlich nicht wirklich schneller, aber etwas aufgeräumter:
Die Zeilen 31 bis 37 könntst Du auch durch
ersetzen ...
Grüße
bastla
Den Quelltext kannst Du mit den Tags
<code>
und </code>
formatieren ...Deine Beispieldaten für "Vorher" und "Nachher" passen für mich nicht zusammen (und ein "
... ansonsten wäre folgender (ungetesteter) Code zwar vermutlich nicht wirklich schneller, aber etwas aufgeräumter:
@echo off & setlocal
REM Schleifenzähler laden
SET Z=0
SET CYCLE=1
SET Label=TABLE
SET ICTRESULT=0.000000
REM Sonderzeichen wie => muessen manuell aus dem Input-file entfernt werden!
REM erzeuge Dummy Header Zeile fuer Log-File Start
>output.log ECHO 08292011_35.log;08292011;06:26:02
for /f "tokens=1-6 delims=ÿ" %%i in (XXX.out) do call:[ZeileBearbeiten] %%i %%j "%%k" %%l %%m %%n
goto:eof
:[ZeileBearbeiten]
echo %1_%2_%~3_%4_%5_%6
IF %1 EQU %Label% (
>>output.log ECHO /
>>output.log ECHO @;004122672;%Z%;08292011;%Z%;1-6m;DUT2(06:26:03)
ECHO %CYCLE% Testlauefe bearbeitet
SET /A CYCLE+=1
)
ECHO %ICTRESULT%
IF %2 EQU %ICTRESULT% (
>>output.log ECHO "
>>output.log ECHO @;004122672;%Z%;08292011;%Z%;1-6m;DUT2(06:26:03)
ECHO %CYCLE% Testlauefe bearbeitet
SET /A CYCLE+=1
)
IF %2 LSS %4 goto :kleiner
IF %2 GTR %5 goto :kleiner
>>output.log ECHO %6=%2(%4,%5)%~3
goto :imlimit
:kleiner
>>output.log ECHO %6^<%2(%4,%5)%~3
:imlimit
ECHO bearbeitete Zeile: %Z%
SET /A Z+=1
goto:eof
(
IF %2 LSS %4 (ECHO %6^<%2^(%4,%5^)%~3) ELSE (IF %2 GTR %5 (ECHO %6^<%2^(%4,%5^)%~3) ELSE (ECHO %6=%2^(%4,%5^)%~3))
)>>output.log
Grüße
bastla
Hallo tueftler!
Codeformatierung ist ok
, aber die Beispieldaten sind weiterhin unvollständig (wie sähe denn eine Zeile mit "TABLE" aus, oder eine mit "*DMM Versorgungsspannung Modul messen"?)
Mit
sollte auch die schließende Klammer geschrieben werden.
Wäre übrigens auch die Verwendung von VBS eine Option?
Grüße
bastla
Codeformatierung ist ok
Mit
>>output.log ECHO @;004122672;%Z%;08292011;%Z%;1-6m;DUT2(06:26:03^)
Wäre übrigens auch die Verwendung von VBS eine Option?
Grüße
bastla

Nein Bastla "wollte" Beispiele zwischen <code> und </code> Tags.
VB probiert gerade ein Kollege, aber ich würde gerne mehr mit Batch machen, das die Umbegung so schön einfach scheint.
- lol
Man benötigt halt für Batch keine "Entwicklungsumgebung" und auch keine Lizenzen o.ä.
Ab xxx Zeilen sollte man der Entwicklungsumgebung Bastla aber schon eine Lizens spendieren.MFG tueftler
Nomen not est omen?
*scnr
Wär nett gewesen, wenn du mir mal geschrieben hättest, woher du das @echo off kennst...
edit
Sie nannten Ihn Bastla, den geduldigen
/edit
Hallo tueftler!
...
Kannst Du bitte noch erklären, was es mit
auf sich hat?
Außerdem: Gibt es die Zeile "TABLE" nur ein einziges Mal in jeder Datei, und wenn ja: Können die Zeilen davor ignoriert werden?
[Edit] Alleine schon wegen des Vergleichs der (Dezimal-)Werte in Batch eher unhandlich, daher eine VBS-Version:
Bitte mit
in der CMD-Shell starten!
@t-mo

[/Edit]
Grüße
bastla
Du wolltest es so haben 
Eigentlich wollte ich die Testdaten auch mit Codeformatierung Man benötigt halt für Batch keine "Entwicklungsumgebung" und auch keine Lizenzen o.ä.
Abgesehen davon, dass ich VBScript angesprochen hatte (wofür auch beides nicht erforderlich ist), gibt es auch eine kostenfreie VB-Version (aktuell VB-Express 2010)Kannst Du bitte noch erklären, was es mit
IF %2 EQU %ICTRESULT% (
Außerdem: Gibt es die Zeile "TABLE" nur ein einziges Mal in jeder Datei, und wenn ja: Können die Zeilen davor ignoriert werden?
[Edit] Alleine schon wegen des Vergleichs der (Dezimal-)Werte in Batch eher unhandlich, daher eine VBS-Version:
Ein = "XXX.out"
Aus = "output.log"
Delim = "ÿ"
' Schleifenzähler laden
CYCLE = 1
Label = "TABLE"
ICTRESULT = "0.000000"
Z = 1
Set fso = CreateObject("Scripting.FileSystemObject")
EinZeilen = Split(fso.OpenTextFile(Ein).ReadAll, vbCrLf) 'alle Zeilen einlesen
' erzeuge Dummy Header Zeile fuer Log-File Start
AusZeilen = "08292011_35.log;08292011;06:26:02"
For Each Zeile In EinZeilen 'alle Zeilen durchgehen
If Zeile = Label Then
AusZeilen = AusZeilen & vbCrLf & "/"
AusZeilen = AusZeilen & vbCrLf & "@;004122672;%Z%;08292011;" & Z & ";1-6m;DUT2(06:26:03)"
WScript.Echo CYCLE & " Testlauefe bearbeitet" 'Bildschirmausgabe
CYCLE = CYCLE + 1
Else
F = Split(Zeile, Delim) 'Zeile anhand des Delimiters in Felder zerlegen (nullbasiertes Array)
If UBound(F) >= 1 Then 'mindestens 2 Felder?
If F(1) = ICTRESULT Then
AusZeilen = AusZeilen & vbCrLf & """"
AusZeilen = AusZeilen & vbCrLf & "@;004122672;%Z%;08292011;" & Z & ";1-6m;DUT2(06:26:03)"
WScript.Echo CYCLE & " Testlauefe bearbeitet" 'Bildschirmausgabe
CYCLE = CYCLE + 1
End If
If IsNumeric(F(1)) And IsNumeric(F(3)) And IsNumeric(F(4)) Then 'Zahlen in den Feldern 2, 4 und 5?
If CDbl(F(1)) >= CDbl(F(3)) And CDbl(F(1)) <= CDbl(F(4)) Then 'Numerischen Vergleich durchführen
AusZeilen = AusZeilen & vbCrLf & F(5) & "=" & F(1) & "(" & F(3) & "," & F(4) & ")" & F(2) 'Ausgabezeile für "IO"
Else
AusZeilen = AusZeilen & vbCrLf & F(5) & "<" & F(1) & "(" & F(3) & "," & F(4) & ")" & F(2) 'Ausgabezeile für "NIO"
End If
End If
End If
End If
WScript.Echo "bearbeitete Zeile: " & Right(" " & Z, 5) 'Bildschirmausgabe
Z = Z + 1
Next
fso.CreateTextFile(Aus).WriteLine AusZeilen 'Ausgabezeilen in Ausgabedatei schreiben
cscript //nologo "D:\Scriptname.vbs"
@t-mo
Sie nannten Ihn Bastla, den geduldigen 
War das nicht eher die Beschreibung für "Biber am Montag"? [/Edit]
Grüße
bastla