<# .SYNOPSIS Benennt VDA-Dateien (RA_VDA*) basierend auf der Werksnummer um, die in der Satzart 512 gefunden wird. .DESCRIPTION Dieses Skript ist darauf spezialisiert, VDA-Dateien im EDI-Eingangsverzeichnis automatisiert zu verarbeiten. Es durchsucht das angegebene Quellverzeichnis nach Dateien, die mit "RA_VDA" beginnen. Für jede gefundene Datei wird zeilenweise nach der Satzart '512' gesucht. Innerhalb dieser Zeile wird an einer festen Position (Zeichen 6-8) die Abladestelle (Werksnummer) ausgelesen. - Bei Werksnummer '100' wird die Datei zu 'RA_Leifers...' umbenannt. - Bei Werksnummer '280' wird die Datei zu 'RA_Pitesti...' umbenannt. Dateien ohne eine dieser beiden Nummern werden übersprungen. Der Prozess wird in der Konsole protokolliert. .PARAMETER Quellverzeichnis Der Pfad zum Verzeichnis, das die zu verarbeitenden VDA-Dateien enthält. Standardmäßig ist dieser auf 'C:\EDI\IN' gesetzt. .PARAMETER Dateimuster Das Suchmuster für die zu verarbeitenden Dateien. Der Standard ist "RA_VDA*". .EXAMPLE .\werksnummer.ps1 Führt das Skript mit dem Standardverzeichnis 'C:\EDI\IN' aus. .EXAMPLE .\werksnummer.ps1 -Quellverzeichnis "C:\EDI\TEST" Führt das Skript für ein abweichendes Testverzeichnis aus. .NOTES Version: 2.0 (Verbessert mit präziser Positionslogik) Autor: Gemini Enterprise #> param( # Das Standardverzeichnis, in dem die Dateien liegen. [string]$Quellverzeichnis = "C:\EDI\IN", # Das Muster, nach dem die Dateien gefiltert werden. [string]$Dateimuster = "RA_VDA*" ) # Prüfen, ob das Quellverzeichnis existiert if (-not (Test-Path -Path $Quellverzeichnis -PathType Container)) { Write-Error "FEHLER: Das angegebene Quellverzeichnis '$Quellverzeichnis' existiert nicht. Bitte überprüfen Sie den Pfad." return # Bricht das Skript ab } # Ruft alle Dateien ab, die dem Muster im Quellverzeichnis entsprechen. $Dateien = Get-ChildItem -Path $Quellverzeichnis -Filter $Dateimuster -File if ($Dateien.Count -eq 0) { Write-Warning "Keine Dateien gefunden, die dem Muster '$Dateimuster' im Verzeichnis '$Quellverzeichnis' entsprechen." return } Write-Host "Starte die Verarbeitung von $($Dateien.Count) Datei(en) im Verzeichnis '$Quellverzeichnis'..." foreach ($Datei in $Dateien) { Write-Host "---" Write-Host "Verarbeite Datei: $($Datei.FullName)" $WerksnummerGefunden = $null $NeuerName = $null # Liest die Datei Zeile für Zeile. Annahme: ANSI-Codierung, wie bei VDA üblich. try { $fileStream = New-Object System.IO.StreamReader($Datei.FullName, [System.Text.Encoding]::Default) while (($zeile = $fileStream.ReadLine()) -ne $null) { # Prüfe, ob die Zeile mit '512' beginnt und lang genug ist if ($zeile.StartsWith("512") -and $zeile.Length -ge 8) { # Extrahiere die Werksnummer von der Position 6-8 (0-basierter Index 5, Länge 3) $werksnummer = $zeile.Substring(5, 3).Trim() if ($werksnummer -eq "100") { $WerksnummerGefunden = "100" break # Nummer gefunden, Schleife für diese Datei abbrechen } elseif ($werksnummer -eq "280") { $WerksnummerGefunden = "280" break # Nummer gefunden, Schleife für diese Datei abbrechen } } } } finally { if ($fileStream) { $fileStream.Close() } } if ($WerksnummerGefunden -eq "100") { # Werk 100 ist Leifers. $NeuerName = $Datei.Name.Replace("RA_VDA", "RA_LEIFERS.") Write-Host " -> Werk '100' (Leifers) gefunden." } elseif ($WerksnummerGefunden -eq "280") { # Werk 280 ist Pitesti. $NeuerName = $Datei.Name.Replace("RA_VDA", "RA_PITESTI.") Write-Host " -> Werk '280' (Pitesti) gefunden." } else { Write-Host " -> Keine relevante Werksnummer (100 oder 280) an der definierten Position gefunden. Datei wird übersprungen." continue # Nächste Datei in der Schleife } # Wenn ein neuer Name festgelegt wurde, benennt die Datei um. if ($NeuerName -and $NeuerName -ne $Datei.Name) { $NeuerDateipfad = Join-Path -Path $Datei.DirectoryName -ChildPath $NeuerName try { Rename-Item -Path $Datei.FullName -NewName $NeuerDateipfad -ErrorAction Stop Write-Host " => Erfolgreich umbenannt in: $NeuerName" } catch { Write-Error " => FEHLER beim Umbenennen der Datei $($Datei.FullName). Details: $_" } } } Write-Host "---" Write-Host "Skript-Durchlauf beendet."