
46933
03.05.2007, aktualisiert am 08.05.2007
mehrere txt Dateien aber nur von der ersten Datei die erste Zeile auslesen
Halli Hallo alle zusammen.
ich hab eine Batch-Datei die mir mehrere txt Dateien ausliest.
Besser gesagt, Zeilen die mit einer bestimmten Zahl anfangen.
Diese Zeilen werden alle in eine neue txt Datei geschrieben.
Diese enthält dann halt nur die Zeilen, welche mit der bestimmten Zahl anfangen.
Soweit so gut.
Jetzt soll aber diese Datei auch noch eine Zeile mit Spaltenüberschriften beinhalten. (die fertige Datei wird nämlich nach Access verknüpft)
Die batch-Datei müßte nun eine Zeile auslesen und diese als erste Zeile in die richtige Datei schreiben.
Aber nur einmal.
Das Problem besteht darin das meine batch-Datei mir diese Zeile aus allen vorhandenen txt Dateien ausliest und diese dann in die richtige Datei schreibt.
Ich brauch sie aber nur einmal.
for /f "tokens=3 delims=:" %%i in ('findstr /B /R "[Standortname]" %Pfad2%\*.txt') do @echo %%i >> fertig\Gesamt.txt
mit diesem Befehl habe ich versucht es zu realisieren.
Er liest mir alle Zeilen die mit Standortname beginnen aus und schreibt sie in Gesamt.txt.
Ich brauch diese Zeile aber nur einmal.
Kann mir jemand helfen?
Gruß gini
ich hab eine Batch-Datei die mir mehrere txt Dateien ausliest.
Besser gesagt, Zeilen die mit einer bestimmten Zahl anfangen.
Diese Zeilen werden alle in eine neue txt Datei geschrieben.
Diese enthält dann halt nur die Zeilen, welche mit der bestimmten Zahl anfangen.
Soweit so gut.
Jetzt soll aber diese Datei auch noch eine Zeile mit Spaltenüberschriften beinhalten. (die fertige Datei wird nämlich nach Access verknüpft)
Die batch-Datei müßte nun eine Zeile auslesen und diese als erste Zeile in die richtige Datei schreiben.
Aber nur einmal.
Das Problem besteht darin das meine batch-Datei mir diese Zeile aus allen vorhandenen txt Dateien ausliest und diese dann in die richtige Datei schreibt.
Ich brauch sie aber nur einmal.
for /f "tokens=3 delims=:" %%i in ('findstr /B /R "[Standortname]" %Pfad2%\*.txt') do @echo %%i >> fertig\Gesamt.txt
mit diesem Befehl habe ich versucht es zu realisieren.
Er liest mir alle Zeilen die mit Standortname beginnen aus und schreibt sie in Gesamt.txt.
Ich brauch diese Zeile aber nur einmal.
Kann mir jemand helfen?
Gruß gini
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 58105
Url: https://administrator.de/forum/mehrere-txt-dateien-aber-nur-von-der-ersten-datei-die-erste-zeile-auslesen-58105.html
Ausgedruckt am: 22.04.2025 um 17:04 Uhr
25 Kommentare
Neuester Kommentar
Hallo ginivpj!
Dazu könntest Du einfach eine "Schalter"-Variable verwenden, etwa so:
Nur beim ersten "for"-Durchlauf existiert die Variable Geschrieben noch nicht, daher wird einmal in die Textdatei geschrieben. Welchen Wert Du danach der Variablen gibst, ist eigentlich egal, es genügt, dass sie gesetzt wird.
Grüße
bastla
Dazu könntest Du einfach eine "Schalter"-Variable verwenden, etwa so:
@echo off & setlocal
set Geschrieben=
for /f "tokens=3 delims=:" %%i in ('findstr /B /R "[Standortname]" %Pfad2%\*.txt') do if not defined Geschrieben echo %%i >> fertig\Gesamt.txt & set Geschrieben=True
Grüße
bastla
Hallo ginivpj!
Der Fehler ist für mich nicht nachvollziehbar, da sich an der bisherigen Funktionalität ja nichts verändert haben sollte - es wird nur das "echo" vom "if not defined" abhängig gemacht.
BTW: Wozu eigentlich der Schalter /R im "findstr" - damit suchst Du eigentlich nach allen einzelnen zwischen "[" und "]" stehenden Zeichen ...
Wenn Du nur Zeilen mit "Standortname" am Anfang finden willst, müsste doch
genügen.
Grüße
bastla
Der Fehler ist für mich nicht nachvollziehbar, da sich an der bisherigen Funktionalität ja nichts verändert haben sollte - es wird nur das "echo" vom "if not defined" abhängig gemacht.
BTW: Wozu eigentlich der Schalter /R im "findstr" - damit suchst Du eigentlich nach allen einzelnen zwischen "[" und "]" stehenden Zeichen ...
Wenn Du nur Zeilen mit "Standortname" am Anfang finden willst, müsste doch
findstr /B "Standortname" %Pfad2%\*.txt
Grüße
bastla
Moin ginivpj,
ihr treibt aber auch immer eine gequirlte... ähm... Rohdatenmasse auf..*grmpfff*
Aber mit Batch geht ja bekanntlich alles....
Ich hoffe, folgender Ansatz hilft Dir weiter.
Die Schwierigkeit ist, dass in der Input-Datei (ich habe sie beim Testen "gini.txt" genannt) die einzelnen Spalten mit TABs getrennt sind. (Welches Programm auch immer so einen Shice macht).
Wenn ein Wert fehlt, stehen dort eben zwei TABS.
Auch das lässt sich handeln. Mit dem oben geposteten Beispiel als gini.txt:
...erzeuge ich folgenden Output:
...das heißt, ich kann die Werte in Spalte [63] auch der richtigen Spalte zuordnen.
Dort, wo ich jetzt "--leer--" reingeschieben habe, kannst Du ja etwas Sinnvolles/Verarbeitbares schreiben.
ABER: ist IMHO alles Grütze.
Der richtigere Weg für Dich MUSS sein, irgendwie (Drohung, Einschüchterung, Bestechung, Neuprogrammierung) das Inputformat von TAB-delimited auf comma-separated o.ä. umzustellen.
Mit diesen TABs ist es...hmm... etwas für Leute, die Batches richtig lieb haben.
Gruss
Biber
ihr treibt aber auch immer eine gequirlte... ähm... Rohdatenmasse auf..*grmpfff*
Aber mit Batch geht ja bekanntlich alles....
Ich hoffe, folgender Ansatz hilft Dir weiter.
Die Schwierigkeit ist, dass in der Input-Datei (ich habe sie beim Testen "gini.txt" genannt) die einzelnen Spalten mit TABs getrennt sind. (Welches Programm auch immer so einen Shice macht).
Wenn ein Wert fehlt, stehen dort eben zwei TABS.
Auch das lässt sich handeln. Mit dem oben geposteten Beispiel als gini.txt:
@echo off & setlocal
@for /f "delims=" %%i in ('findstr /b "20221" gini.txt') do call :processLine "%%i"
goto :eof
:processLine
set "line=%~1"
REM ACHTUNG ---- in der nächsten zeile ist ein TAB nach dem Doppelpunkt!!!!
set "line=%line: =§%"
Set "line=%line:§§=§--leer--§%"
Set "line=%line:§§=§--leer--§%"
@for /f "tokens=3-9 delims=§" %%i in ("%line%") do @echo [11]%%i [22]:%%j [33]:%%k [40]:%%l [63]:%%m
...erzeuge ich folgenden Output:
>e:\schnipsel\gini
[11]01.02.01 [22]:30.08.01 [33]:21.08.01 [40]:05.08.02 [63]:02.10.02
[11]15.03.04 [22]:15.03.04 [33]:24.10.02 [40]:--leer-- [63]:28.11.02
[11]15.03.04 [22]:15.03.04 [33]:05.11.04 [40]:--leer-- [63]:07.05.03
[11]19.09.05 [22]:19.09.05 [33]:29.10.04 [40]:--leer-- [63]:10.01.05
[11]15.03.04 [22]:15.03.04 [33]:24.10.02 [40]:--leer-- [63]:28.11.02
[11]15.03.04 [22]:15.03.04 [33]:05.11.04 [40]:--leer-- [63]:07.05.03
[11]19.09.05 [22]:19.09.05 [33]:29.10.04 [40]:--leer-- [63]:10.01.05
[11]01.02.01 [22]:30.08.01 [33]:21.08.01 [40]:02.10.02 [63]:
[11]15.03.04 [22]:15.03.04 [33]:24.10.02 [40]:28.11.02 [63]:
[11]15.03.04 [22]:15.03.04 [33]:05.11.04 [40]:07.05.03 [63]:
[11]19.09.05 [22]:19.09.05 [33]:29.10.04 [40]:10.01.05 [63]:
Dort, wo ich jetzt "--leer--" reingeschieben habe, kannst Du ja etwas Sinnvolles/Verarbeitbares schreiben.
ABER: ist IMHO alles Grütze.
Der richtigere Weg für Dich MUSS sein, irgendwie (Drohung, Einschüchterung, Bestechung, Neuprogrammierung) das Inputformat von TAB-delimited auf comma-separated o.ä. umzustellen.
Mit diesen TABs ist es...hmm... etwas für Leute, die Batches richtig lieb haben.
Gruss
Biber
Hallo ginivpj!
Zur generellen Problematik der Ausgangsdaten hat, wie ich meine, Biber schon alles gesagt, daher zurück zur eigentlichen Fragestellung:
Durch die unterschiedliche Feldanzahl ändert sich auch Deine ursprüngliche Anforderung hinsichtlich der Überschrift - diese müsste jetzt eigentlich lauten: Schreib die längste mit dem Wort "Standortname" beginnende Zeile aus allen ".txt"-Dateien in "fertig\Gesamt.txt"!
Umsetzen könntest Du das (unter Zuhilfenahme eines temporären VBScripts) etwa so:
Kurze Erklärung: Im ":ProcessHeader"-Unterprogramm wird für jede passende Zeile zunächst (mit Hilfe des in der Datei %Len% gespeicherten VBScripts) die Länge in Zeichen festgestellt. Ist diese <= der bisher größten Länge, kann auf diese Zeile verzichtet werden, anderenfalls wird die Zeile zwischengespeichert und die jetzt neue größte Länge ebenfalls in einer Variablen festgehalten.
Nachdem alle ".txt"-Dateien untersucht wurden, enthält die Variable %Header% die Überschrift mit der größten Zeichenanzahl. Diese wird in die "Gesamt.txt" geschrieben.
Abschließend wird noch die temporäre VBS-Datei gelöscht und zur eigentlichen Verarbeitung (bei ":GetBody") weitergeleitet.
Grüße
bastla
Zur generellen Problematik der Ausgangsdaten hat, wie ich meine, Biber schon alles gesagt, daher zurück zur eigentlichen Fragestellung:
Durch die unterschiedliche Feldanzahl ändert sich auch Deine ursprüngliche Anforderung hinsichtlich der Überschrift - diese müsste jetzt eigentlich lauten: Schreib die längste mit dem Wort "Standortname" beginnende Zeile aus allen ".txt"-Dateien in "fertig\Gesamt.txt"!
Umsetzen könntest Du das (unter Zuhilfenahme eines temporären VBScripts) etwa so:
set "Len=%temp%\GetLen.vbs"
echo WScript.Echo Len(WScript.Arguments(0))>"%Len%"
set Header=
set /a Lang=0
for /f "tokens=3 delims=:" %%i in ('findstr /B "Standortname" %Pfad2%\*.txt') do call :ProcessHeader "%%i"
echo %Header%>>fertig\Gesamt.txt
del "%Len%"
goto :GetBody
:ProcessHeader
for /f %%n in ('cscript //nologo "%Len%" %1') do set /a L=%%n
if %L% leq %Lang% goto :eof
set "Header=%~1"
set /a Lang=%L%
goto :eof
:GetBody
::ab hier weiter mit der Verarbeitung der einzelnen Datensätze (siehe dazu Biber's Lösung)
Nachdem alle ".txt"-Dateien untersucht wurden, enthält die Variable %Header% die Überschrift mit der größten Zeichenanzahl. Diese wird in die "Gesamt.txt" geschrieben.
Abschließend wird noch die temporäre VBS-Datei gelöscht und zur eigentlichen Verarbeitung (bei ":GetBody") weitergeleitet.
Grüße
bastla
Moin ginivpj,
Aber noch mal konkret die Frage:
Gibt es für Dich die Möglichkeit der Einflussnahme auf das Inputdatenformat??
Wenn etwas geliefert werden würde, was zur automatisierten Weiterverarbeitung (und nicht zum Ausdrucken und Abheften) gedacht ist, dann wäre das Geeiere drastisch reduzierbar.
Gruss
Biber
Also ich habe erst mal mit einem Problem angefangen.
Das ist durchaus vernünftig. *gAber noch mal konkret die Frage:
Gibt es für Dich die Möglichkeit der Einflussnahme auf das Inputdatenformat??
Wenn etwas geliefert werden würde, was zur automatisierten Weiterverarbeitung (und nicht zum Ausdrucken und Abheften) gedacht ist, dann wäre das Geeiere drastisch reduzierbar.
Gruss
Biber
Hallo ginivpj!
Deine Verwendung der Pfade ist nicht wirklilch konsequent, daher vielleicht so:
Grüße
bastla
Deine Verwendung der Pfade ist nicht wirklilch konsequent, daher vielleicht so:
@echo off & setlocal
set Pfad1=H:\privat\muss_st1\fertig
set Pfad2=H:\privat\muss_st1
If exist "%Pfad1%\Gesamt.txt" del "%Pfad1%\Gesamt.txt"
If exist "%Pfad1%\wertlos.txt" del "%Pfad1%\wertlos.txt"
set "Len=%temp%\GetLen.vbs"
echo WScript.Echo Len(WScript.Arguments(0))>"%Len%"
set Header=
set /a Lang=0
for /f "tokens=3 delims=:" %%i in ('findstr /B "Standortname" %Pfad2%\*.txt') do call :ProcessHeader "%%i"
echo %Header% >>"%Pfad1%\Gesamt.txt"
del "%Len%"
goto :GetBody
:ProcessHeader
for /f %%n in ('cscript //nologo "%Len%" %1') do set /a L=%%n
if %L% leq %Lang% goto :eof
set "Header=%~1"
set /a Lang=%L%
goto :eof
:GetBody
REM Guten ins Töpfchen...
for /f "tokens=3 delims=:" %%i in ('findstr /B /R "[2]" %Pfad2%\*.txt') do @echo %%i >> "%Pfad1%\Gesamt.txt"
REM Schlechten ins Kröpfchen...
for /f "tokens=3 delims=:" %%i in ('findstr /V /B /R "[2]" %Pfad2%\*.txt') do @echo %%i >> "%Pfad1%\wertlos.txt"
Grüße
bastla
Hallo ginivpj!
Gerade wollte ich dieses zum Besten geben (freue mich aber natürlich, dass Du es selbst geschafft hast):
Hier werden zunächst alle Zeilen der Beispieldatei "gini.txt", die mit "20221" beginnen, an das Unterprogramm ":ProcessLine" übergeben (unter Anführungszeichen, damit die gesamte Zeile erfasst wird).
Im Unterprogramm wird die Zeile "von den Anführungszeichen befreit" (%~1) und einer Variable %line% zugewiesen, damit sie weiterverarbeitet werden kann. Auch hier sorgen wieder die Anführungszeichen für den Zusammenhalt. %1 (und nicht etwa %%i) wird verwendet, da sich das Unterprogramm wie eine weitere Batch-Datei verhält, und die Zeile das erste (und einzige) Argument beim Aufruf darstellt.
Da vorher die Tabs durch "§" ersetzt wurden, können diese jetzt zum Zerlegen des Datensatzes in einzelne Felder verwendet werden, wobei (wie auch bisher schon von Dir verwendet) das erste Feld durch den dritten Bestandteil ("token") der Zeile repräsentiert wird. Da als Variable %%i verwendet wird, werden alle weiteren Bestandteile den folgenden Buchstaben zugewiesen (j, k, ...). Die eingestreuten [11], [22], etc dienen nur zur Demonstration der Zuordnung (ersetzen also quasi die Überschrift).
Es wird jetzt am Ende das Trennzeichen wieder in TAB zurückgewandelt; an dieser Stelle kannst Du natürlich auch "," oder ";" verwenden.
Grüße
bastla
Gerade wollte ich dieses zum Besten geben (freue mich aber natürlich, dass Du es selbst geschafft hast):
@echo off & setlocal
@for /f "delims=" %%i in ('findstr /b "20221" gini.txt') do call :processLine "%%i"
goto :eof
:processLine
set "line=%~1"
Im Unterprogramm wird die Zeile "von den Anführungszeichen befreit" (%~1) und einer Variable %line% zugewiesen, damit sie weiterverarbeitet werden kann. Auch hier sorgen wieder die Anführungszeichen für den Zusammenhalt. %1 (und nicht etwa %%i) wird verwendet, da sich das Unterprogramm wie eine weitere Batch-Datei verhält, und die Zeile das erste (und einzige) Argument beim Aufruf darstellt.
@for /f "tokens=3-9 delims=§" %%i in ("%line%") do @echo [11]%%i [22]:%%j [33]:%%k [40]:%%l [63]:%%m
Was ist nun daran falsch bei mir?
Es hängt davon ab, ob Du die Kennzeichnung der leeren Felder benötigst oder ev ein anderes Trennzeichen als TAB einsetzen willst - falls beides "nein", sollte auch Deine bisherige Lösung genügen, ansonsten:REM Guten ins Töpfchen...
for /f "tokens=3 delims=:" %%i in ('findstr /B /R "[2]" %Pfad2%\*.txt') do call :processLine "%%i"
REM Schlechten ins Kröpfchen...
for /f "tokens=3 delims=:" %%i in ('findstr /V /B /R "[2]" %Pfad2%\*.txt') do @echo %%i >>"%Pfad1%\wertlos.txt"
goto :eof
:processLine
set "line=%~1"
REM ACHTUNG ---- in der nächsten zeile ist ein TAB nach dem Doppelpunkt!!!!
set "line=%line: =§%"
Set "line=%line:§§=§--leer--§%"
Set "line=%line:§§=§--leer--§%"
REM ACHTUNG ---- in der nächsten zeile ist ein TAB vor dem letzten Prozentzeichen!!!!
Set "line=%line:§= %
echo %line%>>%Pfad1%\Gesamt.txt
Grüße
bastla
Hallo ginivpj!
Nachtrag: Wenn Du von TAB auf zB ";" umstellst, muss das natürlich auch bei der Überschrift gemacht werden, also etwa
Nach dem Doppelpunkt steht auch hier ein TAB.
Ich sehe das Problem aber generell darin, dass Du versuchst, Tabellen mit verschiedenem Aufbau zusammenzufassen (in denen - entgegen Biber's Annahme - fehlende Felder nicht "freigehalten", sondern einfach ignoriert werden), etwa
und
Wenn dann zB noch
dazukommt, ist das Durcheinander perfekt. Sehe ich das so richtig?
Eigentlich könnte die Lösung nur so aussehen, dass jeder einzelnen "PB"-Abschnitt (oder, wenn die Struktur einheitlich ist, auch eine gesamte Datei) für sich betrachtet und mit der passenden Überschrift in eine eigene Textdatei geschrieben und einzeln importiert wird, wodurch sich Access beim Import an den Feldnamen orientieren kann (wie ich hoffe).
Grüße
bastla
Nachtrag: Wenn Du von TAB auf zB ";" umstellst, muss das natürlich auch bei der Überschrift gemacht werden, also etwa
echo %Header: =;% >>"%Pfad1%\Gesamt.txt"
Ich sehe das Problem aber generell darin, dass Du versuchst, Tabellen mit verschiedenem Aufbau zusammenzufassen (in denen - entgegen Biber's Annahme - fehlende Felder nicht "freigehalten", sondern einfach ignoriert werden), etwa
Standortname Fehler 11 22 33 40 63
Standortname Fehler 11 22 33 63
Standortname Fehler 11 22 40 63
Eigentlich könnte die Lösung nur so aussehen, dass jeder einzelnen "PB"-Abschnitt (oder, wenn die Struktur einheitlich ist, auch eine gesamte Datei) für sich betrachtet und mit der passenden Überschrift in eine eigene Textdatei geschrieben und einzeln importiert wird, wodurch sich Access beim Import an den Feldnamen orientieren kann (wie ich hoffe).
Grüße
bastla
@bastla
Es kann ja auch kein Hexenwerk sein, per Batch eine weder in der Überschrift noch als Spalteninhalt vorhandene Spalte namens "[33]" mit anzulegen im Kopf wie auch mit Inhalt "--leer--"
Aber stressärmer wäre schon ein Einzelverarbeitung der Dateien - wenn die unterschiedliche Inhalte haben (z.B. Äpfel und Birnen), dann lassen die sich eigentlich nicht aggregieren.
@46933
Ich will nicht penetrant sein, aber... ist es für Dich absolut ausgeschlossen, am Montach mal in der Zentrale anzurufen und ein konstruktuves Telefonat einzuleiten mit den Worten: "Ich kann diese merkwürdigen beliebigen Outputdateien nicht automatisiert verarbeiten, könnt ihr mal eben was Vernünftiges erzeugen und schafft ihr das noch bis 10:30h?"
Denn Batch hat schon etwas mit "automatisierter Verarbeitung" zu tun...
Und dazu braucht man/frau ein paar feste Punkte im Raum.
Gruß
Biber
Eigentlich könnte die Lösung nur so aussehen, ...
...oder aber, die Inhalte der Textdateien mit mal 6, mal 7 und manchmal auch 8 Spalten werden vorher auf ein einheitliches "Layout" gebracht.Es kann ja auch kein Hexenwerk sein, per Batch eine weder in der Überschrift noch als Spalteninhalt vorhandene Spalte namens "[33]" mit anzulegen im Kopf wie auch mit Inhalt "--leer--"
Aber stressärmer wäre schon ein Einzelverarbeitung der Dateien - wenn die unterschiedliche Inhalte haben (z.B. Äpfel und Birnen), dann lassen die sich eigentlich nicht aggregieren.
@46933
Ich will nicht penetrant sein, aber... ist es für Dich absolut ausgeschlossen, am Montach mal in der Zentrale anzurufen und ein konstruktuves Telefonat einzuleiten mit den Worten: "Ich kann diese merkwürdigen beliebigen Outputdateien nicht automatisiert verarbeiten, könnt ihr mal eben was Vernünftiges erzeugen und schafft ihr das noch bis 10:30h?"
Denn Batch hat schon etwas mit "automatisierter Verarbeitung" zu tun...
Und dazu braucht man/frau ein paar feste Punkte im Raum.
Gruß
Biber
@Biber
Grüße
bastla
Eigentlich könnte die Lösung nur so aussehen, ...
Ok, das "nur" ziehe ich zurück ......oder aber, die Inhalte der Textdateien mit mal 6, mal 7 und manchmal auch 8 Spalten werden vorher auf ein einheitliches "Layout" gebracht.
Eine entsprechende Passage hatte ich noch rechtzeitig aus meinem obigen Statement eliminiert, da ich beide der anderen Varianten bevorzugen würde.Grüße
bastla
Hallo ginivpj!
Nachdem die Variable %Geschrieben% erstmals einen Wert erhalten hat, wird keine weitere Überschrift in die Zieldatei geschrieben - daher müsstest Du vor dem Bearbeiten der zweiten Datei mit
die Variable wieder löschen. Allerdings hast Du etwa 20 Dateien erwähnt, und die wirst Du doch nicht alle einzeln im Batch anführen wollen?!
Wenn alle in "H:\privat\muss_st1" enthaltenen Textdateien bearbeitet werden sollen, könntest Du das etwa so lösen:
Durch die Schleife vorneweg werden alle Textdateien der Reihe nach an das Unterprogramm ":ProcessFile" weitergereicht, wo sie wie bisher zerlegt und in eine passende Zieldatei geschrieben werden (%~nx1 bedeutet: Nimm von der übergebenen Datei (%1 im Unterprogramm) nur den Namen und die Extension, also den Dateityp).
Grüße
bastla
Nachdem die Variable %Geschrieben% erstmals einen Wert erhalten hat, wird keine weitere Überschrift in die Zieldatei geschrieben - daher müsstest Du vor dem Bearbeiten der zweiten Datei mit
set Geschrieben=
Wenn alle in "H:\privat\muss_st1" enthaltenen Textdateien bearbeitet werden sollen, könntest Du das etwa so lösen:
@echo off & setlocal
set Pfad1=H:\privat\muss_st1\fertig
set Pfad2=H:\privat\muss_st1
If exist "%Pfad1%\*.txt" del "%Pfad1%\*.txt"
for %%f in ("%Pfad2%\*.txt") do call :ProcessFile "%%f"
goto :eof
:ProcessFile
set Geschrieben=
REM Guten ins Töpfchen...
for /f "delims=:" %%i in ('findstr /B "Standortname" %1') do if not defined Geschrieben @echo %%i >> "%Pfad1%\%~nx1" & set Geschrieben=True
for /f "delims=:" %%i in ('findstr /B /R "[2]" %1') do @echo %%i >> "%Pfad1%\%~nx1"
REM Schlechten ins Kröpfchen...
for /f "delims=:" %%i in ('findstr /V /B /R "[2]" %1') do @echo %%i >>"%Pfad1%\wertlos.txt"
goto :eof
Grüße
bastla