Bestimmte Spalten aus CSV in andere CSV kopieren?
Moin, moin,
bisher habe ich nachfolgendes Batch dafür genutzt, dass bestimmte Spalten aus einer CSV in eine andere kopiert werden:
Jetzt ist mein Wunsch, dass ich nicht die Spaltenbezeichnung nehme, sondern bspw. die 1. - 3. - 4. Spalte für den "Export" - ist das möglich?
bisher habe ich nachfolgendes Batch dafür genutzt, dass bestimmte Spalten aus einer CSV in eine andere kopiert werden:
powershell -Executionpolicy ByPass -Command "$newcsv = @();import-csv $env:USERPROFILE\Desktop\Skripte\test.csv -Delimiter ';' -Encoding Default | %%{$newcsv += [pscustomobject] ([ordered] @{'TEST1'=$_.'TEST1';'TEST2'=$_.'TEST2';'TEST3'=$_.'TEST3'})};$newcsv | Export-Csv $env:USERPROFILE\Desktop\Skripte\test_sort.csv -Delimiter ';' -NoTypeInformation -Encoding Default"
Jetzt ist mein Wunsch, dass ich nicht die Spaltenbezeichnung nehme, sondern bspw. die 1. - 3. - 4. Spalte für den "Export" - ist das möglich?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 366264
Url: https://administrator.de/contentid/366264
Ausgedruckt am: 23.11.2024 um 13:11 Uhr
7 Kommentare
Neuester Kommentar
Servus,
kein Thema
Grüße Uwe
kein Thema
powershell -Executionpolicy ByPass -Command "(import-csv $env:USERPROFILE\Desktop\Skripte\test.csv -Delimiter ';' -Encoding Default) | Select NameSpalte1,NameSpalte3,NameSpalte4 | Export-Csv $env:USERPROFILE\Desktop\Skripte\test_sort.csv -Delimiter ';' -NoTypeInformation -Encoding Default"
?? Du meinst damit das ein und die selbe Spalte unterschiedliche Namen haben können? Wenn das der Fall ist setze bei Import-CSV mit dem Parameter -Header feste Namen für die Spalten und setze diese dann im Select ebenfalls ein.
Ansonsten siehst du ja oben wie du die unterschiedlichen Spalten anhand des Namens im Select auswählst, ganz einfach den Namen der Spalte wie der in der ersten Zeile der CSV steht angeben, fertig!
Ansonsten siehst du ja oben wie du die unterschiedlichen Spalten anhand des Namens im Select auswählst, ganz einfach den Namen der Spalte wie der in der ersten Zeile der CSV steht angeben, fertig!
Ich hatte dir oben zwar scchon den Hinweis geliefert wie du es in deinem Fall machen musst wenn es identische Namen gibt aber naja hier nochmal in Codeform:
Was du hier machst ist folgendes, es wird die CSV erst einmal als normales Zeilenarray geladen (Get-Content), dann wird die Überschriftenzeile übersprungen (Da diese ja nicht kompatible Infos enthält), dann wird diese wieder in ein Objekt überführt inkl. Angabe neuer Spaltenbezeichner welche du dann im Select-Befehl auswählen kannst wie du willst.
powershell -Executionpolicy ByPass -Command "gc $env:USERPROFILE\Desktop\Skripte\test.csv -Encoding Default | select -skip 1 | ConvertFrom-CSV -Delimiter ';' -Header A,B,C,D | Select A,C,D| Export-Csv $env:USERPROFILE\Desktop\Skripte\test_sort.csv -Delimiter ';' -NoTypeInformation -Encoding Default"
Kannst du direkt im Select machen mit einer Calculated Property.
powershell -Executionpolicy ByPass -Command "gc $env:USERPROFILE\Desktop\Skripte\test.csv -Encoding Default | select -skip 1 | ConvertFrom-CSV -Delimiter ';' -Header A,B,C,D | Select @{n='SpalteA';e={$_.A}},@{n='SpalteC';e={$_.C}},@{n='SpalteD';e={$_.D}}| Export-Csv $env:USERPROFILE\Desktop\Skripte\test_sort.csv -Delimiter ';' -NoTypeInformation -Encoding Default"