Wir wünschen euch eine frohe Adventszeit und gemütliche Stunden mit euren Oldgames!

Unterordner umbenennen
#1
0
Gibt es eine Möglichkeit, Unterordner automatisiert so zu benennen, dass die den übergeordneten Ordner in eckigen Klammern am Anfang haben?
Also "[übergeordneter Ordner] Unterordnername"

Möchte neu sortieren, aber die alte Sortierung nicht verlieren.

Geht das?
Web Upload Archiv Upload down? Dann hier melden: klick

[Bild: garfieldadminx9pa7.gif]

Mein FTP: [Bild: ftp.php?server=ftp.corsafahrer.com&port=22222] Ihr braucht für einige Uploads Winrar 5 zum Entpacken!
Zitieren
#2
1
Ich habe keine Ahnung ob und wie das geht, aber nur zum Verständnis, du möchtest so eine benannte Verzeichnis-Struktur?
Code:
Science-Fiction
|
[Science-Fiction] Dr. Who
  |
  [Science-Fiction] [Dr. Who] Staffel 1
Vielleicht kann das sogar der Total Commander. Über Strg+M steht ein mächtiges Tool mit Regex-Funktion und Filter und Verfügung.
[Bild: sigkryeu.gif]
Dt. Text-Patch für die Uncut-Version von ›IHNMIMS‹
http://ihnm.blogspot.comThread
Zitieren
#3
0
(22.11.2022, 18:35)Mustrum schrieb: Ich habe keine Ahnung ob und wie das geht, aber nur zum Verständnis, du möchtest so eine benannte Verzeichnis-Struktur?
Code:
Science-Fiction
|
[Science-Fiction] Dr. Who
  |
  [Science-Fiction] [Dr. Who] Staffel 1
Vielleicht kann das sogar der Total Commander. Über Strg+M steht ein mächtiges Tool mit Regex-Funktion und Filter und Verfügung.
Ja, genau
Web Upload Archiv Upload down? Dann hier melden: klick

[Bild: garfieldadminx9pa7.gif]

Mein FTP: [Bild: ftp.php?server=ftp.corsafahrer.com&port=22222] Ihr braucht für einige Uploads Winrar 5 zum Entpacken!
Zitieren
#4
0
Jo, geht mit dem Total Commander, aber der nimmt die eckigen Klammern nicht, muss ich halt mit den runden leben.
Web Upload Archiv Upload down? Dann hier melden: klick

[Bild: garfieldadminx9pa7.gif]

Mein FTP: [Bild: ftp.php?server=ftp.corsafahrer.com&port=22222] Ihr braucht für einige Uploads Winrar 5 zum Entpacken!
Zitieren
#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
#6
0
Cool. wie wäre es hier (angepinnt?) einen Thread zu machen wo im Eingangspost sämtliche spezielle Batch- und PowerShell-Scripte verlinkt und unterhalb diese mit Erklärung gepostet werden (mit Verweis auf den Ursprungsthread)?
[Bild: sigkryeu.gif]
Dt. Text-Patch für die Uncut-Version von ›IHNMIMS‹
http://ihnm.blogspot.comThread
Zitieren
#7
0
Die eckigen Klammern waren ja nicht so wichtig. Mit der Powershell kenne ich mich nicht aus, klappt ja wunderbar mit dem Total Commander.
Web Upload Archiv Upload down? Dann hier melden: klick

[Bild: garfieldadminx9pa7.gif]

Mein FTP: [Bild: ftp.php?server=ftp.corsafahrer.com&port=22222] Ihr braucht für einige Uploads Winrar 5 zum Entpacken!
Zitieren


Gehe zu:


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