lianenschwinger
Goto Top

Datei anhand von Textteilen aus der Datei mit PowerShell umbenennen

Hallo,

ich bräuchte ein Powershellscript welches alle Dateien in einem Verzeichnis nach einer bestimmten Zeichenfolge durchsucht und die jeweilige Datei mit Textteilen aus der Datei umbenennt.

Hier ein Auszug aus den Dateien:

UNH+1+INVOIC:D:96B:UN:ITEK34'BGM+380::89+970418651+9'DTM+3:20181113:102'  

Der Fachmann wird sofort erkennen, dass es sich hier um eine Edifact-Datei handelt. face-smile

Gesucht werden soll nach "BGM+38" und in Abhängigkeit des nächsten Zeichens (0 oder 1) die Datei entweder mit 0 = CD oder 1 = CR und der Zahl nach dem nächsten "+" plus der original Dateiendung (hier wfa) umbenannt werden .Also entsprechend dem Beispiel in "CD970418651.wfa"

Meine eigentliche Idee wäre nach BGM suchen den Text bis zum nächsten ' in einer Variablen speichern und in ein Array am "+" splitten.
Dann könnte man in Abhängigkeit des 2. und 3. Arrayfeldes den Dateinamen zusammensetzen.

Begonnen habe ich hiermit

Get-ChildItem -Path $SrcDir\* -Include $FileType | Select-String -Pattern $SearchKey

Da endet aber mein Powershellverständnis bereits.

Für Eure Hilfe wäre ich dankbar.

G LianenSchwinger

Content-Key: 392767

Url: https://administrator.de/contentid/392767

Printed on: April 24, 2024 at 10:04 o'clock

Mitglied: 137808
Solution 137808 Nov 14, 2018 updated at 12:39:30 (UTC)
Goto Top
Regular Expressions does the work for you:
dir $SrcDir\* -Include $FileType -File | ?{(gc $_.FullName) -match 'BGM\+38([01]).*?\+(\d+)'} | rename-item -NewName {"$(@{$true='CD';$false='CR'}[$matches[1] -eq '0'])$($matches[2])$($_.Extension)"} -Force -verbose  
Best Regards
Member: LianenSchwinger
LianenSchwinger Nov 14, 2018 at 13:01:55 (UTC)
Goto Top
Thank you very much. You're great.

Best regards LianenSchwinger