Ordner m. Powershell umbenennen

Ordner umbennen nach einem bestimmten Schema m. Powershell m. Erklärung.

Was macht das Script?

Stellt Euch vor ihr habt unzählige Ordner die z.B. so aussehen:

abc – 123 – Name1 – Vorname1
[irgendwas] –  Name2 – Vorname2

Es steht also immer am Anfang etwas, was später entfernt werden soll. Wichtig hierbei: Das Script arbeit sich quasi von rechts nach links weil sich hier viele Gemeinsamkeiten befinde. Der Vordere Text ist von der Länge unterschiedlich.

Das Ziel: Nach dem Scriptlauf sollen alle Ordner wie folgt aussehen

Name1 – Vorname1
Name2 – Vorname2

Es wird also alles vor dem “Namex” abgeschnitten, damit nur noch der Teil
stehen bleibt, mit dem letzten Bindestrich zw. 2 Wörtern.

Verwendung:
Man ruft das Script  direkt in dem Ordner  auf, indem sich die Ordner befinden mit einem Rechtsklick -> Mit Powershell ausführen.
Das Script muss die Dateiendung .ps1 haben.

Hinweis:
Es werden nur die Ordner in der 1. Ebene umbenannt, keine Unterordner und keine Dateien.

$dirs = Get-ChildItem -Directory
foreach ($d in $dirs)
{$t = $d.name.split("-")
$C = $t.count
$new1 = $t[$C-2]
$new2 = $t[$C-1]
$folder = $new1 + "-" + $new2
$folder = $folder.Trim()
Rename-Item -Literalpath $d.FullName -NewName $folder}

Was macht das Script jetzt – im Detail?

Z1: Alle Ordner werden eingelesen und in die Variable $dirs geschrieben.
Z2: Mit der Schleife wird aus $dirs jeder Ordner durchlaufen und in $d gespeichert.
Z3: Schau man sich mal $d an (siehe unten) sieht man viel mehr Daten als nur den reinen Ordnernamen. Deswegen muss man an die Variable nur den reinen Namen übergeben. Also mit $d.name. Zusätzlich wird mit der Split Funktion ein Array erzeugt welches in $t geschrieben wird.
Wenn man als Beispiel diesen Ordnernamen nimmt: abc – 123 – Name1 – Vorname1 dann steht später im Array

abc
123
Name1
Vorname1

Z4: ich zähle wieviele Werte im Array stehen und übergebe diese an $c, im Beispiel sind das 4 Werte. Um den Namen1 zu bekommen muss ich Anzahl der Werte minus 2 rechnen.
Die Werte im Array fangen bei 0 an, nicht bei 1!!!!
Z5: $new1 = Wert aus dem Array -2
Z6: $new2 = Wert aus dem Array -1
Z7: jetzt werden die beiden Werte mit einem “-” zusammengesetzt
Z8: benötigt man nicht unbedingt, hier werden Leerzeichen vorne/hinten entfernt.
Z9: mit dem Rename Commando wird der Alte Name mit dem neuen Namen getauscht.

Noch ein Hinweis zu der letzten Zeile Z9
Die hat mich nämlich etwas Zeit gekostet. In einigen Ordnernamen habe ich hin und wieder Sonderzeichen
wie [] eckige Klammern oder andere Sonderzeichen.

Das Script ist dann immer abgebrochen. Die Lösung, statt Rename-Item -Path muss man -Literalpath verwenden.
Denn nur dann sieht Powershell solche Sonderzeichen als ganz normales Zeichen an.

Info: wenn man mal sehen will was in eine Variable eigentlich geschrieben wird kann man ganz einfach im Script eine Zeile einfügen in der nur z.B. $d steht.
Dann wird beim durchlaufen der Schleife die Variable am Bildschirm ausgegeben. Das ist ganz gut bei der Fehlersuche.

Nach der Schleife, Ausgabe von $d
(Visited 3 times, 1 visits today)