132 lines
4.6 KiB
PowerShell
132 lines
4.6 KiB
PowerShell
<#
|
|
.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."
|
|
|
|
|
|
|