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?
Please also mark the comments that contributed to the solution of the article
Content-Key: 366264
Url: https://administrator.de/contentid/366264
Printed on: April 24, 2024 at 10:04 o'clock
7 Comments
Latest comment
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"