Foreach einzeln bearbeiten
Hallo Community,
ich weiß wenn ich diese Frage hier stelle fassen sich bestimmt einige an den Kopf, nur stehe ich gerade gewaltig auf dem Schlauch.
Zu meinem Problem:
Ich habe einen Ordner da werden unterschiedliche CSV Daten gespeichert.
Nun möchte ich jede Datei einzeln über ein Powershell bearbeiten und neu abspeichern. Dafür habe ich an eine foreach-schleife gedacht.
Hier mal mein script:
Problem ist das er mir damit nicht jede CSV einzeln abspeichert sondern alle Daten in eine einzelne CSV schreibt. Kann mir jemand einen Anstoß geben wo genau ich meinen Fehler mache?
Vielen Dank
ich weiß wenn ich diese Frage hier stelle fassen sich bestimmt einige an den Kopf, nur stehe ich gerade gewaltig auf dem Schlauch.
Zu meinem Problem:
Ich habe einen Ordner da werden unterschiedliche CSV Daten gespeichert.
Nun möchte ich jede Datei einzeln über ein Powershell bearbeiten und neu abspeichern. Dafür habe ich an eine foreach-schleife gedacht.
Hier mal mein script:
$dateien = get-childitem C:\TestOrdner\Daten\*.csv
foreach ($datei in $dateien)
{$datei}
Function Transpose-Data{
param(
[String[]]$Names,
[Object[]]$Data
)
for($i = 0;; ++$i){
$Props = [ordered]@{}
for($j = 0; $j -lt $Data.Length; ++$j){
if($i -lt $Data[$j].Length){
$Props.Add($Names[$j], $Data[$j][$i])
}
}
if(!$Props.get_Count()){
break
}
[PSCustomObject]$Props
}
}
$InDatum = @(Get-Content -path $datei | Where-Object {$_.Contains("Datum")})
$InWert1 = @(Get-Content -path $datei | Where-Object {$_.Contains("Wert1")})
Transpose-Data Datum, Wert1 $InDatum, $InWert1 | export-csv C:\TestOrdner\Wertliste$(Get-Date -UFormat '%d%m_%H%M%S').csv -Delimiter ';' -NoTypeInformation -encoding UTF8 -force
Problem ist das er mir damit nicht jede CSV einzeln abspeichert sondern alle Daten in eine einzelne CSV schreibt. Kann mir jemand einen Anstoß geben wo genau ich meinen Fehler mache?
Vielen Dank
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 2198685884
Url: https://administrator.de/contentid/2198685884
Ausgedruckt am: 20.11.2024 um 02:11 Uhr
3 Kommentare
Neuester Kommentar
Moin,
kein Wunder.
Gruß
em-pie
kein Wunder.
- Deine foreach-Schleife besteht nur aus dem Teil, dass du einmal den Namen der Datei ausgibst (Zeile 3).
- Deine Zeilen 22, 23 und 24 liegen nicht im Foreach-Block.
- dein Object $Data, welches du an deine Funktion übergeben möchtest, wird nicht übergeben
- deine Variable $Names, aus der Funktion wird beim Aufruf nicht gefüllt.
- mache in Zeile 22 + 23 mal ein
Import-CSV
anstelle deinesGet-Content
- Zeile 24 beinhaltet nicht je Datei einen neuen Namen; du schreibst ja alles in die Datei "Wertliste1703_105859
Gruß
em-pie
Zitat von @BlueEyePhoenix:
Danke für die Hilfe damit konnte ich mein Problem lösen. Die foreach-Schleife musste ich noch mit meinem Transpose-Data verknüpfen und das mit dem Namen wollte ich ja mit der Datums und Zeitangabe lösen nur brauchte ich dafür noch die Millisekunden da es sonst immer überschrieben hat.
ICH würde das anders lösen Danke für die Hilfe damit konnte ich mein Problem lösen. Die foreach-Schleife musste ich noch mit meinem Transpose-Data verknüpfen und das mit dem Namen wollte ich ja mit der Datums und Zeitangabe lösen nur brauchte ich dafür noch die Millisekunden da es sonst immer überschrieben hat.
baue mal folgendes in deine foreach ein:
...
$filename = [System.IO.Path]::GetFileNameWithoutExtension($datei)
...
... | export-csv C:\TestOrdner\Wertliste_$filename_$(Get-Date -UFormat '%d%m_%H%M%S').csv -Delimiter ';' -NoTypeInformation -encoding UTF8 -force
Dann hast du den konkreten Dateinamen mit in deiner Ausgabedatei
Manchmal sieht man halt den Wald vor lauter Bäumen nicht
So ist es.