CSV mit batch bearbeiten - auslesen
Hallo,
ich habe viele unterordner mit *.csv-Dateien. Diese haben folgendes Format:
beispiel.csv:
name ; x
name 2 ; y
name 3 ; z
name 4 ; 1
beispiel2.csv:
name ; x2
name 2 ; y2
name 3 ; z2
name 4 ; 12
Aufgabe: alle csv-Dateien zusammen in eine einzelne mit folgendem Format zusammenführen.
alle.csv:
name; name 2; name 3; name 4
x; y; z; 1
x2; y2; z2; 12
Soweit war ich schon.
del alle.csv
dir /b /s *.csv > test.txt
echo name; name 2; name 3; name 4 >alle.csv
FOR /f "usebackq delims==" %%a IN (test.txt) DO type "%%a" >>alle.csv
del test.txt
Nur das "do" müsste sich jetzt so gestalten, dass er die erste "spalte" eines jeden csv ignioert. Kann mir dabei wer helfen?
Danke & gruß
ich habe viele unterordner mit *.csv-Dateien. Diese haben folgendes Format:
beispiel.csv:
name ; x
name 2 ; y
name 3 ; z
name 4 ; 1
beispiel2.csv:
name ; x2
name 2 ; y2
name 3 ; z2
name 4 ; 12
Aufgabe: alle csv-Dateien zusammen in eine einzelne mit folgendem Format zusammenführen.
alle.csv:
name; name 2; name 3; name 4
x; y; z; 1
x2; y2; z2; 12
Soweit war ich schon.
del alle.csv
dir /b /s *.csv > test.txt
echo name; name 2; name 3; name 4 >alle.csv
FOR /f "usebackq delims==" %%a IN (test.txt) DO type "%%a" >>alle.csv
del test.txt
Nur das "do" müsste sich jetzt so gestalten, dass er die erste "spalte" eines jeden csv ignioert. Kann mir dabei wer helfen?
Danke & gruß
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 170639
Url: https://administrator.de/contentid/170639
Ausgedruckt am: 23.11.2024 um 19:11 Uhr
10 Kommentare
Neuester Kommentar
Hallo webbudda,
teste mal folgendes:
Quell- und Zielverzeichnis müssen verschieden sein, sonst wird auch die Zieldatei von der äußeren
Kleiner Schönheitsfehler: Alle Zeilen der erzeugten CSV-Datei enden mit einem Semikolon, was quasi eine zusätzliche leere Spalte erzeugt. Falls die Datei nicht mit Excel weiterverarbeitet werden soll, einfach in Excel laden und nochmal als CSV speichern, dann verschwinden die abschließenden Semikolons.
Gruß
Friemler
teste mal folgendes:
@echo off & setlocal
set "SrcDir=E:\Test"
set "DestDir=E:\Ausgabe"
set "OutFile=%DestDir%\Alle.csv"
>"%OutFile%" echo Name;Name 2;Name 3;Name 4;
for %%f in ("%SrcDir%\*.csv") do (
for /f "usebackq tokens=1* delims=;" %%l in ("%%f") do (
>>"%OutFile%" <NUL set /p "=%%m;"
)
>>"%OutFile%" echo.
)
FOR
-Schleife gefunden und somit verarbeitet.Kleiner Schönheitsfehler: Alle Zeilen der erzeugten CSV-Datei enden mit einem Semikolon, was quasi eine zusätzliche leere Spalte erzeugt. Falls die Datei nicht mit Excel weiterverarbeitet werden soll, einfach in Excel laden und nochmal als CSV speichern, dann verschwinden die abschließenden Semikolons.
Gruß
Friemler
Aloha,
tja, heute ist Freitag, da bau ich wieder große Klötzchen *gg*
Wenn du wirklich nur vier Zeilen pro Datei hast und keine Semikola am Ende zusätzlich magst, hätte ich auch noch das meine übliche irgendwie geht das auch komplizierter - Nummer im Angebot:
greetz André
edit: Porzellan und so
tja, heute ist Freitag, da bau ich wieder große Klötzchen *gg*
Wenn du wirklich nur vier Zeilen pro Datei hast und keine Semikola am Ende zusätzlich magst, hätte ich auch noch das meine übliche irgendwie geht das auch komplizierter - Nummer im Angebot:
@echo off & setlocal enabledelayedexpansion
set "Pfad=E:\Skripte\Ablage"
set "Liste=E:\Skripte\alle.csv"
if exist "%Liste%" del "%Liste%"
>"%Liste%" echo name;name2;name3;name4
for /f "delims=" %%s in ('dir /b /s "%Pfad%\*.csv"') do (
for /f "usebackq delims=; tokens=2" %%m in ("%%s") do (
set "Z4=!Z3!"
set "Z3=!Z2!"
set "Z2=!Z1!"
set "Z1=%%m"
)
>>"%Liste%" echo !Z4!;!Z3!;!Z2!;!Z1!
)
pause
goto :eof
greetz André
edit: Porzellan und so
Moin André,
der TO hat in seinen Beispieldaten bei "Name 4" numerische Werte angegeben. Keine Ahnung, ob das nun wirklich so ist oder ob es sich doch um Personennamen handelt. Bei numerischen Werten würde Dein Script aber möglicherweise in die Grütze fassen, da Du die Ausgabeumleitung hinter die Werte schreibst, die von
Gruß
Friemler
der TO hat in seinen Beispieldaten bei "Name 4" numerische Werte angegeben. Keine Ahnung, ob das nun wirklich so ist oder ob es sich doch um Personennamen handelt. Bei numerischen Werten würde Dein Script aber möglicherweise in die Grütze fassen, da Du die Ausgabeumleitung hinter die Werte schreibst, die von
ECHO
ausgegeben werden. Dadurch könnte dann sowas wie echo x;y;z;2>>"%Liste%"
entstehen. Somit würde diese Zeile als x;y;z;
auf dem Bildschirm landen und nicht in der Datei.Gruß
Friemler
Hallo webbudda,
sorry, das mit dem "rekursiv" habe ich verdrängt .
Versuche es mal so:
Gruß
Friemler
sorry, das mit dem "rekursiv" habe ich verdrängt .
Versuche es mal so:
@echo off & setlocal
set "SrcDir=E:\Test"
set "DestDir=E:\Ausgabe"
set "OutFile=%DestDir%\Alle.csv"
>"%OutFile%" echo Name;Name 2;Name 3;Name 4;
for /r "%SrcDir%" %%f in (*.csv) do (
for /f "usebackq tokens=1* delims=;" %%l in ("%%f") do (
>>"%OutFile%" <NUL set /p "=%%m;"
)
>>"%OutFile%" echo.
)
Gruß
Friemler