2016-05-13 2 views
1

Ich versuche Chargen von Dateien verwenden, Powershell umbenennen:Umstellen Sätze in Dateinamen mit Powershell

file name_FACEBOOK POST 
file name_TWITTER POST 
file name_FACEBOOK EVENT BANNER 

zu

FACEBOOK POST - file name 
TWITTER POST - file name 
FACEBOOK EVENT BANNER - file name 

Der „Dateiname“ kann eine beliebige Anzahl von Wörtern mit Leerzeichen sein . Der "Dateityp" kann eine beliebige Anzahl von Wörtern mit Leerzeichen sein.

Mein aktueller Code:

ls | Rename-Item -NewName {$_.name -replace '^(\w+)_(\w+)', '$2-$1'} 

Aber das funktioniert nicht ...

Antwort

0

Es ist ein Problem mit Ihrem regex sein kann. \ W entspricht alphanumerics und den Unterstrich, aber Sie sagte, dass der Dateiname Leerzeichen in es haben kann, so ist es für nicht überein.

ls | Rename-Item -NewName {$_.name -replace '^([^_]+)_(.+)', '$2-$1'} 

Die [^_] jedes Zeichen außer Strich statt.

+0

erstaunlich ist: D Nur Problem ist jetzt, dass es die Dateierweiterung mit ihm genommen hat ... haha ​​.. "FACEBOOK POST.jpg-MTG ewige Meister" –

+0

Ich denke, dass ich es reparierte! Vielen Dank :) –

0

Ich würde für den Spaß einer Regex ersetzen gehen auch, aber da @ Matts1 nahm, wollte ich eine Alternative finden.

ls | Rename-Item -NewName {"{1} - {0}.{2}" -f $_.Name.Split('_.')} 

(.Split() Splits zu beiden Zeichen, nicht beide zusammen, so dass es eine Reihe von ersten Teil, der zweite Teil, die Erweiterung, und dann String formatiert sie in die neue Ordnung macht)

+1

Das funktioniert auch wie ein Charme! : 3 Berücksichtigt auch die Dateiendung. Vielen Dank! –