landix
Goto Top

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:

1
$Arbeitspfad='Q:\OSFDL'  

1
ls -recurse "$Arbeitspfad\*.csv" |? {! (Import-Csv -Delimiter ',')} | select 'hr','power' | set-content $file  

Leider wehrt sich das System irgendwie: face-smile

1
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?

Content-ID: 558914

Url: https://administrator.de/forum/spalten-mehrerer-csv-dateien-loeschen-558914.html

Ausgedruckt am: 13.04.2025 um 17:04 Uhr

TK1987
Lösung TK1987 18.03.2020 aktualisiert um 14:34:10 Uhr
Goto Top
Moin,

Zitat von @Landix:
1
PS C:\WINDOWS\system32> ls -recurse "$Arbeitspfad\*.csv" |? {! (Import-Csv -Delimiter ',')} | select 'hr','power' | set-content $file  
Das ? ist ein Alias für Where-Object, und dient rein dazu, irgendwelche Bedingungen zu überprüfen.

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
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
Landix
Landix 18.03.2020 um 14:40:00 Uhr
Goto Top
Super
und wieder herzlichen Dank für die Hilfe.
Ich glaube ich sollte mehr mit powershell machen, schein mega interessant zu sein