0

Ich bin auf der Suche nach einer Möglichkeit, mehrere Sonderzeichen aus Dateinamen über ein Powershell-Skript zu entfernen.PowerShell Entfernen von Sonderzeichen aus Dateinamen

Meine Dateinamen wie folgt aussehen:

[Bericht] _first_day_of_month_01_ (generated_by_powershell) _ [repnbr1] .txt

ich die [] und alles zwischen ihnen, die() und alles, was über das Entfernen rätselhaft wurden zwischen denen und dem Entfernen aller _ ist auch, mit dem gewünschten Ergebnis ein Dateiname ist, der wie folgt aussieht:

ersten Tag des Monats 01.txt

bis jetzt habe ich die unten Lösung ohne Erfolg versucht haben, . Ich habe jeden von diesen aus dem Verzeichnis ausgeführt, in dem sich die Dateien befinden.

Get-ChildItem -Path .\ -Filter *.mkv | %{ 
$Name = $_.Name 
$NewName = $Name -Replace "(\s*)\(.*\)",'' 
$NewName2 = $NewName -Replace "[\s*]\[.*\]",'' 
$NewName3 = $NewName2 -Replace "_",' ' 
Rename-Item -Path $_ -NewName $NewName3 
} 

Da es nicht einmal arbeiten, wenn ich versuche, und wie dies zu einer Zeit, einen Satz tun:

Get-ChildItem -Path .\ -Filter *.mkv | %{ 
$Name = $_.Name 
$NewName = $Name -Replace "(\s*)\(.*\)",'' 
Rename-Item -Path $_ -NewName $NewName 
} 

Ich nehme an, es ist ein inhärenter Fehler in der Art, wie ich diese Aufgabe zu erfüllen versuchen . Davon abgesehen würde ich lieber das Cmdlet Rename-Item verwenden, anstatt eine Move-Item-Lösung zu verwenden.

Antwort

1
gci *.txt | Rename-Item -NewName {$_ -replace '_*(\[.*?\]|\(.*?\))_*' -replace '_+', ' '} 

Die Umbenennungs ist ein regulärer Ausdruck, die [text] oder (text) Blöcke entspricht und ersetzt sie durch nichts. Klammern und Klammern müssen in Regexes entfernt werden, um sie wörtlich zu finden. Es entspricht ihnen mit optionalen führenden oder abschließenden Unterstrichen, um [Report]_ oder _[repnbr1] zu erhalten, weil es _ am Anfang oder am Ende des Namens verlassen würde und sie würden führende/nachstehende Leerzeichen werden, was ärgerlich ist. Dann werden die verbleibenden Unterstriche durch Leerzeichen ersetzt.

Siehe die Regex, hier zu arbeiten: Regex101

+0

Danke. Ich habe versucht, eine ähnliche Lösung mit begrenztem Erfolg, aber das hat den Trick 100% !! Vielen Dank! – GreatMagusKyros

Verwandte Themen