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-ID: 392767

Url: https://administrator.de/forum/datei-anhand-von-textteilen-aus-der-datei-mit-powershell-umbenennen-392767.html

Ausgedruckt am: 22.12.2024 um 11:12 Uhr

137808
Lösung 137808 14.11.2018 aktualisiert um 13:39:30 Uhr
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
LianenSchwinger
LianenSchwinger 14.11.2018 um 14:01:55 Uhr
Goto Top
Thank you very much. You're great.

Best regards LianenSchwinger