Willkommen im cgboard - classic games Forum! Deine gemütliche Retro Gaming Community. Besuche uns auch im Discord Chat.

Unterordner umbenennen
#5
1
Hier ist eine Variante in PowerShell, die das auch mit eckigen Klammern macht:

Code:
# Aufruf mit powershell -ExecutionPolicy RemoteSigned -File rename_folders_by_parent.ps1

# Funktion benennt Ordner in einem Verzeichnis um.
function Rename-Folders-In-Directory {
    param (
        $rootDirectory,
        $directory
    )
   
    # Alle Ordner auflisten
    $directoryList = Get-ChildItem -LiteralPath $directory.FullName -directory
   
    # Zuerst die inneren Ordner umbenennen
    foreach ($childDirectory in $directoryList) {
        Rename-Folders-In-Directory $rootDirectory $childDirectory
    }
   
    # Jeden Überordner bis zum Startverzeichnis in eckigen Klammern aneinanderketten
    $parentDirectoryNames = ""
    $parentDirectory = $directory.Parent
    while ($parentDirectory.FullName -ne $rootDirectory.FullName) {
        $parentDirectoryName = Get-Original-Directory-Name $parentDirectory $rootDirectory
        $parentDirectoryNames = "[$parentDirectoryName] $parentDirectoryNames"
        $parentDirectory = $parentDirectory.Parent
    }
    $parentDirectoryName = $parentDirectory.Name
    $parentDirectoryNames = "[$parentDirectoryName] $parentDirectoryNames"
   
    # Den ursprünglichen Ordnernamen hintendran setzen
    $directoryName = Get-Original-Directory-Name $directory $rootDirectory
    $newDirectoryName = "$parentDirectoryNames$directoryName"
    # Umbenennen, wenn der Ordner nicht schon richtig heißt
    if ($directory.Name -ne $newDirectoryName) {
        Rename-Item -LiteralPath $directory.FullName -NewName $newDirectoryName
    }
}

# Funktion liefert den ursprünglichen Ordnernamen ohne die hinzugefügten Überordner
function Get-Original-Directory-Name {
    param (
        $directory,
        $rootDirectory
    )
   
    $directoryName = $directory.Name
    $parentDirectory = $directory.Parent
    # Suche rückwärts für jeden Ordnernamen immer zuerst den Elternordnernamen.
    # Weil das Startverzeichnis nie umbenannt wird, bekommen wir irgendwann eine Konstante.
    while ($parentDirectory.FullName -ne $rootDirectory.FullName) {
        $parentDirectoryName = Get-Original-Directory-Name $parentDirectory $rootDirectory
        # Entferne das Elternverzeichnis vom Ordnernamen
        $directoryName = $directoryName -replace ([regex]::Escape('[' + $parentDirectoryName + '] ')),''
        $directoryName = $directoryName -replace ([regex]::Escape('(' + $parentDirectoryName + ') ')),''
        $parentDirectory = $parentDirectory.Parent
    }
    # Das Startverzeichnis hat immer einen Namen ohne eckige Klammern.
    $rootDirectoryName = $rootDirectory.Name
    # Entferne das Startverzeichnis vom Ordnernamen
    $directoryName = $directoryName -replace ([regex]::Escape('[' + $rootDirectoryName + '] ')),''
    $directoryName = $directoryName -replace ([regex]::Escape('(' + $rootDirectoryName + ') ')),''

    return $directoryName
}

# Startverzeichnis einlesen
$rootDirectory = Get-Item .
$directoryList = Get-ChildItem . -directory

# Anfang der Schleife. Jeden Ordner umbenennen
foreach ($directory in $directoryList) {
    Rename-Folders-In-Directory $rootDirectory $directory
}

Die Datei rename_folders_by_parent.ps1 nennen und in das Zielverzeichnis, wo die Unterordner umbenannt werden sollen, hinkopieren.
Dann kann man das mit dem Aufruf in der ersten Kommentarzeile ausführen.

Weil du jetzt eventuell schon runde Klammern hast, benennt es auch runde Klammern in eckige um.

Mein Fazit zu PowerShell: Das ist auf jeden Fall angenehmer zu lesen als Batch. Aber auch in diesem kleinen anschaulichen Beispiel gab es zwei Verhaltensweisen, die mich kalt erwischt hatten (Rename-Item braucht -LiteralPath statt den Standard -Path, weil das sonst als RegEx interpretiert wird und -replace braucht auch ein Regex-Escape). Dennoch eine coole Erfindung. Und es kommt direkt mit allen möglichen Sonderzeichen klar. Ich weiß gar nicht, warum ich da so lange mit gezögert habe, das mal anzugucken. Von daher vielen Dank für diesen Anstoß mit der überschaubaren Aufgabe, damit ich mir das mal angucke. Big Grin
Zitieren


Nachrichten in diesem Thema
Unterordner umbenennen - von Corsafahrer - 22.11.2022, 17:40
RE: Unterordner umbenennen - von Mustrum - 22.11.2022, 18:35
RE: Unterordner umbenennen - von Corsafahrer - 22.11.2022, 21:56
RE: Unterordner umbenennen - von Corsafahrer - 23.11.2022, 10:55
RE: Unterordner umbenennen - von tomwatayan - 23.11.2022, 20:37
RE: Unterordner umbenennen - von Mustrum - 23.11.2022, 20:59
RE: Unterordner umbenennen - von Corsafahrer - 25.11.2022, 07:14

Möglicherweise verwandte Themen…
Thema Verfasser Antworten Ansichten Letzter Beitrag
  Ordner umbenennen / Text löschen? 3kA 12 3.956 11.07.2009, 20:24
Letzter Beitrag: gremlin31
  [Frage] unter cmd datei mit leerzeichen umbenennen 80er 6 4.133 18.05.2007, 10:19
Letzter Beitrag: SonataFanatica

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste