Erster Commit
This commit is contained in:
131
scripts/Werksnummer.ps1
Normal file
131
scripts/Werksnummer.ps1
Normal file
@@ -0,0 +1,131 @@
|
||||
<#
|
||||
.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."
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user