Datei auslesen und bestimmte Wörter in neue Datei schreiben mit Batch
Hallo,
ich habe hier eine große Datei mit vielen Kryptischen Zeichen, aber auch normalen Buchstaben:
(Beispiel-datei-Ausschnitt) "einlesedatei.txt"
...
"name" "-424 25744 582"
"wert" "4 3 24"
"pfad" "daten/name1.rst"
"klname" "sarg_wert12g"
"pfad" "logs/name2.pop"
...
...so, ich möchte nun daraus eine neue Datei, die folgendes Beinhaltet:
/daten/datei1.rst
/logs/datei2.pop
und so weiter, je nachdem wieviele datei-angaben mit .rst oder .pop in der Datei stehen. Wie kann ich das am einfachsten realisieren? Habe leider kaum Ahnung von Batch...bisher hatte ich das etwa gebaut:
@echo off
set PF=einlesedatei.txt
findstr /C:".rst" %PF% > rst.txt
findstr /C:".pop" %PF% > pop.txt
copy rst.txt+pop.txt alle.txt
dadurch habe ich dann eine datei, mit alles Zeilen wo ".rst" und ".pop" vorkommt:
z.B.:
"pfad" "daten/name1.rst"
"pfad" "daten/name1.rst"
"pfad" "daten/name1.rst"
"pfad" "logs/name2.pop"
"pfad" "logs/name2.pop"
Das wäre schritt 1 ^^ ...aber wie kann ich jetzt erreichen das ich eine Datei daraus bekomme die nur:
"pfad" "daten/datei1.rst"
"pfad" "logs/datei2.pop"
beinhaltet(also doppelte Einträge raus)...und dann jeweils -"pfad" "- und -"- (am ende) lösch,t und ein "/" vorne dranhängt?
Kann mir da jemand weiterhelfen helfen?
lg
ich habe hier eine große Datei mit vielen Kryptischen Zeichen, aber auch normalen Buchstaben:
(Beispiel-datei-Ausschnitt) "einlesedatei.txt"
...
"name" "-424 25744 582"
"wert" "4 3 24"
"pfad" "daten/name1.rst"
"klname" "sarg_wert12g"
"pfad" "logs/name2.pop"
...
...so, ich möchte nun daraus eine neue Datei, die folgendes Beinhaltet:
/daten/datei1.rst
/logs/datei2.pop
und so weiter, je nachdem wieviele datei-angaben mit .rst oder .pop in der Datei stehen. Wie kann ich das am einfachsten realisieren? Habe leider kaum Ahnung von Batch...bisher hatte ich das etwa gebaut:
@echo off
set PF=einlesedatei.txt
findstr /C:".rst" %PF% > rst.txt
findstr /C:".pop" %PF% > pop.txt
copy rst.txt+pop.txt alle.txt
dadurch habe ich dann eine datei, mit alles Zeilen wo ".rst" und ".pop" vorkommt:
z.B.:
"pfad" "daten/name1.rst"
"pfad" "daten/name1.rst"
"pfad" "daten/name1.rst"
"pfad" "logs/name2.pop"
"pfad" "logs/name2.pop"
Das wäre schritt 1 ^^ ...aber wie kann ich jetzt erreichen das ich eine Datei daraus bekomme die nur:
"pfad" "daten/datei1.rst"
"pfad" "logs/datei2.pop"
beinhaltet(also doppelte Einträge raus)...und dann jeweils -"pfad" "- und -"- (am ende) lösch,t und ein "/" vorne dranhängt?
Kann mir da jemand weiterhelfen helfen?
lg
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 70858
Url: https://administrator.de/forum/datei-auslesen-und-bestimmte-woerter-in-neue-datei-schreiben-mit-batch-70858.html
Ausgedruckt am: 19.05.2025 um 17:05 Uhr
6 Kommentare
Neuester Kommentar
Hallo teklan und willkommen im Forum!
Falls Du nicht tatsächlich vorhast (wie in Deinem Beispiel) aus "name1.rst" ein "datei1.rst" zu machen, könnte das so klappen:
"D:\Ein.txt" wäre dabei Deine "große Datei".
Grüße
bastla
Falls Du nicht tatsächlich vorhast (wie in Deinem Beispiel) aus "name1.rst" ein "datei1.rst" zu machen, könnte das so klappen:
@echo off & setlocal
set "Ein=D:\Ein.txt"
set "Aus=D:\Aus.txt"
if exist "%Aus%" del "%Aus%"
set Zuletzt=-
for /f "tokens=2" %%i in ('findstr ".rst .pop" "%Ein%"^|sort') do call :ProcessLink "%%~i"
goto :eof
:ProcessLink
if %1==%Zuletzt% goto :eof
set Zuletzt="%~1"
(echo /%~1)>>"%Aus%"
Grüße
bastla
Hallo teklan!
Ändere die "findstr"-Schreibweise auf
Du könntest das "@echo off" auf "@echo on" ändern und den Batch so aufrufen:
In der damit erstellten "D:\Log.txt" könntest Du dann versuchen, dem Fehler auf die Spur zu kommen. Wenn Du
schreibst, werden auch die Fehlermeldungen in der Log-Datei protokolliert.
Grüße
bastla
Ändere die "findstr"-Schreibweise auf
findstr "\.rst \.pop" "%Ein%"
Bei Ausführung wird "FINDSTR: Fehler beim Schreiben" angezeigt, und in der letzten Zeile der Ausgabedatei erscheint nur das "/" ;)
Mit den aus Deinem ersten Posting entnommenen Testdaten erhalte ich keine derartige Fehlermeldung.Du könntest das "@echo off" auf "@echo on" ändern und den Batch so aufrufen:
Batchname > D:\Log.txt
Batchname > D:\Log.txt 2>&1
Grüße
bastla
... Nachtrag: Damit das Filtern mehrfach vorhandener Einträge sicherer wird, sollte eine temporäre Liste erstellt werden. Dann ergibt sich folgender Batch:
Grüße
bastla
[Edit] Korrektur: In der letzten Zeile muss die Ausgabe nach "%Aus%" erfolgen. Außerdem ist "%Aus%" vorweg zu löschen. [/Edit]
@echo off & setlocal
set "Ein=D:\Ein.txt"
set "Aus=D:\Aus.txt"
set "T=%Temp%\Unsortiert.txt"
if exist "%T%" del "%T%"
for /f "tokens=2" %%i in ('findstr "\.rst \.pop" "%Ein%"') do (echo %%~i)>>"%T%"
set Zuletzt=-
if exist "%Aus%" del "%Aus%"
for /f "delims=" %%i in ('sort "%T%"') do call :ProcessLink "%%~i"
del "%T%"
goto :eof
:ProcessLink
if %1==%Zuletzt% goto :eof
set Zuletzt="%~1"
(echo /%~1)>>"%Aus%"
Grüße
bastla
[Edit] Korrektur: In der letzten Zeile muss die Ausgabe nach "%Aus%" erfolgen. Außerdem ist "%Aus%" vorweg zu löschen. [/Edit]