PowerShell + RegEX - Unerlaubte Zeichen und Symbole aus Dateinamen entfernen
Ich bitte um eine Hilfestellung mit PowerShell + RegEX.
Ich möchte alle unerlaubten Zeichen aus Dateinamen entfernen - insbesondere Symbole!
Fragt bitte nicht wieso die da drin sind - Einfach zum: "Kopfschütteln".
Zulassen möchte ich nur "A-Z, a-z, 0-9 + -_()", sowie Umlaute.
Ok. Es gibt sehr viele Themen bereits darüber, aber ob Ihr es glaubt oder nicht, ich verbringe
bereits Stunden damit ohne eine entsprechende Lösung zu finden.
Beispiel:
Rename-Item "Test_Symbol_in_😍_Datein😯ame.txt" -NewName "Neuer_Dateiname.txt"
(UTF-8-BOM)
Rename-Item "Test_Symbol_in_??_Dateiname.txt" -NewName "Neuer_Dateiname.txt"
(Ansi)
Kopiere ich z.B. aus einer TXT mit UTF-8-BOM den Befehl, erscheint im cmd Fenster Ansi.
Zwar funktioniert das, aber ich möchte das mit RegEX (u. mögl. als Batch / Alle Dateinamen im Verzeichnis) tätigen,
insbesondere wenn zig Dateien umbenannt werden müssen.
Wie ist es daher möglich den Dateiname umbenennen zu lassen, oder besser gesagt "alle unerlaubten Zeichen"
werden einfach zu einem _ Unterstrich geändert.
Umlaute, und Leerzeichen sollten jedoch im Dateiname vorhanden bleiben - in etwa so was:
^\\w\\däüö Ä_ÜÖ()\\+\\-.
Nach X Versuche mit RegEx bekomme ich aber nur ständige Syntax Fehlermeldungen.
Daher möchte ich nun in die Runde fragen, und hoffe sehr, dass vielleicht jemand ein Lösungsvorschlag hat.
Vielen Dank!
Ich möchte alle unerlaubten Zeichen aus Dateinamen entfernen - insbesondere Symbole!
Fragt bitte nicht wieso die da drin sind - Einfach zum: "Kopfschütteln".
Zulassen möchte ich nur "A-Z, a-z, 0-9 + -_()", sowie Umlaute.
Ok. Es gibt sehr viele Themen bereits darüber, aber ob Ihr es glaubt oder nicht, ich verbringe
bereits Stunden damit ohne eine entsprechende Lösung zu finden.
Beispiel:
Rename-Item "Test_Symbol_in_😍_Datein😯ame.txt" -NewName "Neuer_Dateiname.txt"
(UTF-8-BOM)
Rename-Item "Test_Symbol_in_??_Dateiname.txt" -NewName "Neuer_Dateiname.txt"
(Ansi)
Kopiere ich z.B. aus einer TXT mit UTF-8-BOM den Befehl, erscheint im cmd Fenster Ansi.
Zwar funktioniert das, aber ich möchte das mit RegEX (u. mögl. als Batch / Alle Dateinamen im Verzeichnis) tätigen,
insbesondere wenn zig Dateien umbenannt werden müssen.
Wie ist es daher möglich den Dateiname umbenennen zu lassen, oder besser gesagt "alle unerlaubten Zeichen"
werden einfach zu einem _ Unterstrich geändert.
Umlaute, und Leerzeichen sollten jedoch im Dateiname vorhanden bleiben - in etwa so was:
^\\w\\däüö Ä_ÜÖ()\\+\\-.
Nach X Versuche mit RegEx bekomme ich aber nur ständige Syntax Fehlermeldungen.
Daher möchte ich nun in die Runde fragen, und hoffe sehr, dass vielleicht jemand ein Lösungsvorschlag hat.
Vielen Dank!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 639712
Url: https://administrator.de/contentid/639712
Ausgedruckt am: 19.12.2024 um 14:12 Uhr
2 Kommentare
Neuester Kommentar
Zulassen möchte ich nur "A-Z, a-z, 0-9 + -_()", sowie Umlaute.
function Replace-Chars([parameter(ValueFromPipeline=$true)]$string,$replaceString='_'){
$r = "[^\w\+\-\(\)äöü ]"
if ($replaceString -match $r){
Write-Error -Message "Parameter '-replaceString' contains invalid filename chars/sequences." -Category InvalidArgument -TargetObject $replaceString
break
}
while($string -match $r){
$string = ($string -replace $r,$replaceString).trim()
}
return $string
}
ls 'D:\Ordner' -File -Recurse -Force -EA SilentlyContinue | ?{$_.Basename -match '[^\w\+\-\(\)äöü ]'} | ren -NewName {(Replace-Chars $_.Basename -replaceString '_') + $_.Extension} -Force -Verbose