.csv Dateien Zusammenkopieren und bestimmte Zeilen entfernen
Hallo,
Ich habe einen Ordner voller *.csv Dateien und möchte diese per Batch zu einer Datei zusammenfügen... bis dahin kein Problem.
Allerdings hat jede der *.csv Dateien die in dem Ordner liegen eine Überschrift (Zeile 1).
Diese Überschrift ist sehr lang (ca. 500 Zeichen) und sie soll in der erzeugten Datei nur einmal am Anfang auftauchen.
Hat jemand eine Idee wie ich das Problem lösen kann?
Danke für eure Hilfe!
Ich habe einen Ordner voller *.csv Dateien und möchte diese per Batch zu einer Datei zusammenfügen... bis dahin kein Problem.
Allerdings hat jede der *.csv Dateien die in dem Ordner liegen eine Überschrift (Zeile 1).
Diese Überschrift ist sehr lang (ca. 500 Zeichen) und sie soll in der erzeugten Datei nur einmal am Anfang auftauchen.
Hat jemand eine Idee wie ich das Problem lösen kann?
Danke für eure Hilfe!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 78467
Url: https://administrator.de/forum/csv-dateien-zusammenkopieren-und-bestimmte-zeilen-entfernen-78467.html
Ausgedruckt am: 20.05.2025 um 17:05 Uhr
4 Kommentare
Neuester Kommentar
Hallo -t3mp-!
Unter der Annahme, dass die genannte Überschrift in allen Dateien identisch ist und daher aus einer beliebigen Datei entnommen werden kann, sowie dass es keine vorgegebene Reihenfolge für die Bearbeitung der einzelnen Dateien gibt, etwa so:
Alternativ dazu könntest Du auch einfach vorweg die (vermutlich auch in Zukunft gleich bleibende) Zeile 1 in eine Datei "D:\DeinOrdner\Zeile1.txt" speichern und es danach so versuchen:
Hier bist Du zwar weniger flexibel, da bei einer allfälligen Änderung der Zeile 1 nicht nur die zugehörige "Zeile1.txt", sondern auch der Suchstring "SignifikanterZeilenanfangZeile1" im Batch angepasst werden muss, solltest aber andererseits von Leerzeilen in der Sammeldatei verschont bleiben.
Der genannte Suchstring soll so viele Zeichen vom Beginn der Zeile 1 an enthalten, dass damit diese Zeile sicher erkannt und aus der temporären Sammeldatei ausgefiltert werden kann. Es dürfen übrigens auch Leerzeichen Bestandteil dieses Suchstrings sein.
Grüße
bastla
Unter der Annahme, dass die genannte Überschrift in allen Dateien identisch ist und daher aus einer beliebigen Datei entnommen werden kann, sowie dass es keine vorgegebene Reihenfolge für die Bearbeitung der einzelnen Dateien gibt, etwa so:
@echo off & setlocal
set "Ordner=D:\DeinOrdner"
set "Sammel=D:\DeineSammeldatei.csv"
pushd "%Ordner%"
if exist "%Sammel%" del "%Sammel%"
for %%i in (*.csv) do if not exist "%Sammel%" for /f "usebackq delims=" %%z in ("%%i") do if not exist "%Sammel%" echo %%z>"%Sammel%"
for %%i in (*.csv) do more +1 "%%i">>"%Sammel%"
popd
@echo off & setlocal
set "Ordner=D:\DeinOrdner"
set "Sammel=D:\DeineSammeldatei.csv"
set "Zeile=D:\DeinOrdner\Zeile1.txt"
copy "%Zeile%" "%Sammel%" >nul
copy "%Ordner%\*.csv" "%Sammel%.tmp" >nul
findstr /v /b /c:"Eine ganz lange Ueberschrift" "%Sammel%.tmp">>"%Sammel%"
del "%Sammel%.tmp"
Der genannte Suchstring soll so viele Zeichen vom Beginn der Zeile 1 an enthalten, dass damit diese Zeile sicher erkannt und aus der temporären Sammeldatei ausgefiltert werden kann. Es dürfen übrigens auch Leerzeichen Bestandteil dieses Suchstrings sein.
Grüße
bastla
Hallo -t3mp-!
Um die chronologische Ordnung (anhand des Änderungsdatums der jeweiligen Datei) sicherzustellen, wäre es so besser:
Noch ein Hinweis: Derzeit ist der Batch darauf ausgelegt, bei jedem Start eine neue Sammeldatei aus allen vorhandenen .csv-Dateien zu erstellen - falls dies nicht gewünscht wäre, sondern die aktuelle Sammeldatei nur (und dann natürlich ohne Kopfzeile) ergänzt werden soll, einfach die Zeile
durch das Voranstellen von REM oder :: auskommentieren (oder auch löschen). Allerdings müssten dann nach jedem Durchlauf die bereits verarbeiteten Dateien aus dem Ordner entfernt werden.
Grüße
bastla
Um die chronologische Ordnung (anhand des Änderungsdatums der jeweiligen Datei) sicherzustellen, wäre es so besser:
@echo off & setlocal
set "Ordner=D:\DeinOrdner"
set "Sammel=D:\DeineSammeldatei.csv"
pushd "%Ordner%"
if exist "%Sammel%" del "%Sammel%"
for %%i in (*.csv) do if not exist "%Sammel%" for /f "usebackq delims=" %%z in ("%%i") do if not exist "%Sammel%" echo %%z>"%Sammel%"
for /f "delims=" %%i in ('dir /b /od *.csv') do more +1 "%%i">>"%Sammel%"
popd
if exist "%Sammel%" del "%Sammel%"
Grüße
bastla