ibetonyou

CSV Datei in mehrere Dateien splitten

Hallo zusammen,

ich hänge irgendwie und bräucht Hilfe von euch Spezialisten. face-smile

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
}}
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

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

7010350221
Lösung 7010350221 31.05.2023 aktualisiert um 13:02:09 Uhr
Goto Top
Mal wieder die Glaskugel bemühen, so ganz ohne Dateiaufbau ...
# 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."  
}
Gruß
ibetonyou
ibetonyou 31.05.2023 um 13:25:50 Uhr
Goto Top
Geht gut die Glaskugel. face-smile Das ist die Lösung. Vielen vielen Dank.
7010350221
7010350221 31.05.2023 um 15:58:48 Uhr
Goto Top
👌...