Spalten mehrerer CSV Dateien löschen
Moin,
ich möchte aus einigen *.csv Dateien jeweils die Spalten 1,2,5,6 löschen, oder die Spalten mit dem header: secs,km,cad,alt (Die Dateien sind immer gleich.
Also Spalte 3,4 (power,hr) soll erhalten bleiben.
Bis jetzt habe ich mir sowas zusammen gesponnen:
Leider wehrt sich das System irgendwie:
Watt nun?
ich möchte aus einigen *.csv Dateien jeweils die Spalten 1,2,5,6 löschen, oder die Spalten mit dem header: secs,km,cad,alt (Die Dateien sind immer gleich.
Also Spalte 3,4 (power,hr) soll erhalten bleiben.
Bis jetzt habe ich mir sowas zusammen gesponnen:
1
$Arbeitspfad='Q:\OSFDL'
1
ls -recurse "$Arbeitspfad\*.csv" |? {! (Import-Csv -Delimiter ',')} | select 'hr','power' | set-content $file
Leider wehrt sich das System irgendwie:
1
2
3
4
5
6
7
2
3
4
5
6
7
PS C:\WINDOWS\system32> ls -recurse "$Arbeitspfad\*.csv" |? {! (Import-Csv -Delimiter ',')} | select 'hr','power' | set-content $file
Set-Content : Das Argument kann nicht an den Parameter "Path" gebunden werden, da es NULL ist.
In Zeile:1 Zeichen:105
+ ... Import-Csv -Delimiter ',')} | select 'hr','power' | set-content $file
+ ~~~~~
+ CategoryInfo : InvalidData: (:) [Set-Content], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.SetContentCommand
Watt nun?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 558914
Url: https://administrator.de/forum/spalten-mehrerer-csv-dateien-loeschen-558914.html
Ausgedruckt am: 13.04.2025 um 17:04 Uhr
2 Kommentare
Neuester Kommentar
Moin,
Du überprüfst da in dem Fall gerade, ob import-csv keine (da die Bedingung mit dem vorrangestellten ! negiert wurde) Ausgabe hat - was an sich schon keinen Sinn ergibt. Darüber hinaus fehlt bei import-csv auch noch die Angabe der Input-Datei.
Zudem: Wenn du mit Import-Csv Daten einliest und hinten wieder eine CSV-Datei rausbekommen willst, musst du natürlich mit Export-Csv arbeiten.
Das % ist ein Alias für Foreach-Object.
Gruß Thomas
Zitat von @Landix:
Das ? ist ein Alias für Where-Object, und dient rein dazu, irgendwelche Bedingungen zu überprüfen.1
PS C:\WINDOWS\system32> ls -recurse "$Arbeitspfad\*.csv" |? {! (Import-Csv -Delimiter ',')} | select 'hr','power' | set-content $file
Du überprüfst da in dem Fall gerade, ob import-csv keine (da die Bedingung mit dem vorrangestellten ! negiert wurde) Ausgabe hat - was an sich schon keinen Sinn ergibt. Darüber hinaus fehlt bei import-csv auch noch die Angabe der Input-Datei.
Zudem: Wenn du mit Import-Csv Daten einliest und hinten wieder eine CSV-Datei rausbekommen willst, musst du natürlich mit Export-Csv arbeiten.
1
2
3
4
2
3
4
ls -recurse "$Arbeitspfad\*.csv" | % {
$File=Import-Csv -Delimiter ',' -Encoding Default $_ | select hr,power
$File|Export-csv -Delimiter ',' -Encoding Default -NoTypeInformation $_.FullName
}
Das % ist ein Alias für Foreach-Object.
Gruß Thomas