bagirah
Goto Top

Ordner, bzw. Dateien automatisch umbenenen - Namensteile tauschen

Hallo

Ich würde mich über etwas Hilfe freuen.

Ich habe viele Ordner, die ich umbenennen möchte.
Beispiele für einen Ordnernamen:

Max Mustermann
Anton Ackermann
Tim Thaler-Kleinfeld

Ich möchte aber nun gerne den Nachnamen zuerst haben.

Daher die Frage, wie ich die Teile des Ordnernamens in Variablen speichern kann.
Bisher habe ich versucht den Namen auslesen (z.B. mit Get-Childitem in Powershell).
Dann scheiterte es aber an der Flexibilität, den String passend zu zerlegen.
Das Trennzeichen müßte angegeben werden können.
Wenn man dann den Vor- bzw. Nachnamen jeweils in eine Variable gespeichert hat, müßte nun der Ordner damit neu benamt werden.
Schön wäre auch, wenn es nicht nur mit Ordnern funktioniert, sondern auch mit Dateien.


Schöne Grüße und vielen Dank im voraus

Content-Key: 292814

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

Ausgedruckt am: 28.03.2024 um 12:03 Uhr

Mitglied: 114757
Lösung 114757 12.01.2016 aktualisiert um 11:49:07 Uhr
Goto Top
Für Ordner
gci 'C:\root' | ?{$_.PSIsContainer} | rename-item -NewName {$_.Name -replace '(.*) (.*)','$2 $1'} -Force  

Für Dateien
gci 'C:\root' | ?{!$_.PSIsContainer} | rename-item -NewName {"$($_.Basename -replace '(.*) (.*)','$2 $1')$($_.Extension)"} -Force  

Gruß jodel32

@Biber "Umbenenen" die 1000enste face-big-smile
Mitglied: Bagirah
Bagirah 12.01.2016 um 10:37:16 Uhr
Goto Top
Danke für die rasche Antwort.
Werde es gleich mal testen.
Mitglied: Bagirah
Bagirah 12.01.2016 um 11:01:47 Uhr
Goto Top
Funktioniert gut - vielen Dank

Wäre es möglich, daß Trennzeichen flexibel anzupassen?

Für die Ausgabe habe ich das Leerzeichen um ein Komma erweitert bekommen.
'$2, $1'

Beim Einlesen der Namensteile klappt das leider nicht so einfach.
Theo.Test wollte ich zu Test, Theo umbenennen.

Ich habe versucht '(.*) (.*)' durch '(.*).(.*)' oder '(.*)(.)(.*)' zu ersetzen.

Da kamen dann lustige Ergebnisse raus.

Könntest du mir sagen, ob das Trennzeichen hier flexibel angegeben werden kann?

Schöne Grüße
Mitglied: 114757
Lösung 114757 12.01.2016 aktualisiert um 13:20:58 Uhr
Goto Top
Das sind Regular Expressions dort haben viele Zeichen andere Bedeutungen face-wink, der einfache Punkt zum Beispiel steht für jedes beliebige Zeichen, man muss sie also mit einem Backslash escapen, wenn du das Trennzeichen in einer Variable definieren willst geht das so
$trenner = [regex]::Escape(".")  
gci 'C:\root' | ?{$_.PSIsContainer} | rename-item -NewName {$_.Name -replace "(.*)\s?($trenner)\s?(.*)",'$3$2$1'} -Force  
Mitglied: Bagirah
Bagirah 12.01.2016 um 13:20:11 Uhr
Goto Top
Dann noch einmal vielen Dank
Mitglied: Biber
Biber 12.01.2016 um 14:03:28 Uhr
Goto Top
[OT]
Moin jodel32,

Zitat von @114757:

@Biber "Umbenenen" die 1000enste face-big-smile
Ja, hatte ich gelesen.
Aber ich dachte, ich realisiere vielleicht einen neuen 64-Bit-rgc mit Powershell.
Kann auch nicht länger dauern als die Umsetzung der paar Features auf Franks ToDo-Rolle.

Grüße
Biber
[/OT]