CSV Datei in mehrere Dateien splitten
Hallo zusammen,
ich hänge irgendwie und bräucht Hilfe von euch Spezialisten.
Ich bekomme täglich von der Versandsoftware Easylog der DHL eine csv generiert in welcher die abgeschlossenen Sendungen aufgelistet sind. Die Datei ist so aufgbaut, dass an der 4ten Stelle der Absender steht (gibt verschiede Absender).
Ich würde nun gerne die original Datei auslesen und jeweils 1 Datei pro Absender generieren, welche dann in den passenden Ordner verschoben wird. Leider klappt mein Script jedoch nicht richtig, da nur kopien der Ursprungsdatei erstellt werden. Was mach ich falsch?
ich hänge irgendwie und bräucht Hilfe von euch Spezialisten.
Ich bekomme täglich von der Versandsoftware Easylog der DHL eine csv generiert in welcher die abgeschlossenen Sendungen aufgelistet sind. Die Datei ist so aufgbaut, dass an der 4ten Stelle der Absender steht (gibt verschiede Absender).
Ich würde nun gerne die original Datei auslesen und jeweils 1 Datei pro Absender generieren, welche dann in den passenden Ordner verschoben wird. Leider klappt mein Script jedoch nicht richtig, da nur kopien der Ursprungsdatei erstellt werden. Was mach ich falsch?
#break
# initiale Angebe der Pfade
$Quellpfad = 'C:\Users\xxx\Documents\Script Easylog\Daten'
$Backuppfad = 'C:\Users\xxx\Documents\Script Easylog\Daten\Backup\'
$Verschiebepfad = 'C:\Users\xxx\Documents\Script Easylog\Import'
# Textdateien verschieben
$Quelldateien = Get-ChildItem -Path $Quellpfad -File
foreach ($Item in $Quelldateien) {
if ($Item.FullName -like "*.txt"){
# Textdateien kopieren
Copy-Item -Path $Item.Fullname -Destination $Backuppfad
# Textdateien verschieben
Move-Item -Path $Item.FullName -Destination $Verschiebepfad
}
}
#Standort aus Datei auslesen
$Zieldateien = Get-ChildItem -Path $Verschiebepfad -File
foreach ($Item in $Zieldateien) {
if ($Item.FullName -like "*.txt"){
$file = $Item | Get-Content -TotalCount 1
$file = $file -split ';'
#Standort immer an vierter Stelle der Datei
$file = $file[3]
#Kompletten Pfad bauen
[System.String]$path = $Verschiebepfad + '\' + $file
#Prüfen ob es bereits einen Ordner für den Standort gibt
$switch = Test-Path -Path $path
#Falls es noch keinen Ordner für den Standort gibt, einen Ordner anlegen
if ($switch -eq $false ){
New-Item -ItemType Directory -Path $Verschiebepfad -Name $file
}
#Datei in den entsprechenden Standort Ordner verschieben
Move-Item -Path $Item.FullName -Destination $path
}}
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 7371522199
Url: https://administrator.de/forum/csv-datei-in-mehrere-dateien-splitten-7371522199.html
Ausgedruckt am: 27.04.2025 um 17:04 Uhr
3 Kommentare
Neuester Kommentar

Mal wieder die Glaskugel bemühen, so ganz ohne Dateiaufbau ...
Gruß
# initiale Angebe der Pfade
$Quellpfad = 'C:\Users\xxx\Documents\Script Easylog\Daten'
$Backuppfad = 'C:\Users\xxx\Documents\Script Easylog\Daten\Backup'
$Verschiebepfad = 'C:\Users\xxx\Documents\Script Easylog\Import'
# Dateien suchen
$Quelldateien = Get-ChildItem -Path $Quellpfad -File -Filter *.txt
if ($Quelldateien){
# Hole alle Zeilen aller Dateien und gruppiere sie nach der 4 Spalte
foreach($group in Get-Content $quelldateien.Fullname | Group-Object {$_.Split(";")[3].trim()} | where {$_.Name -ne ''}){
# erstelle den Zielpfad wobei in Spalte 4 der Name des neuen Ordners steht
$destpath = "$Verschiebepfad\$($group.Name)"
# wenn Ordner noch nicht existiert erstelle ihn
if (!(Test-Path $destpath)){
New-Item -ItemType dir -Path $destpath -Force
}
# schreibe die Zeilen in einer gemeinsame Datei
$group.Group | set-content -Path "$destpath\$($group.Name).txt"
}
# Dateien ins Backup verschieben
$Quelldateien | move-item -Destination $Backuppfad
}else{
Write-Warning "Keine Dateien im Quellpfad."
}

👌...