Script zum Ordner Umbenennen
Hallo zusammen,
ich habe folgendes Problem:
Ich habe ein Haufen von Ordnern derren Namen wie folgt aufgebaut ist:
Unterschiedlich lange Namen, nach jedem Wort ein "."
Meine.Bilder.Urlaub.2008.I
Meine.Bilder.Sommer.Ferien.2008.D
Meine.Bilder.Winter.Urlaub.2008.GB
Meine.Bilder.Sommer.Da.2008.D
Meine.Bilder.Winter.Hier.2008.CZ
Meine.Bilder.Herbst.Urlaub.2008.D
Meine.Bilder.Zwischendurch.Urlaub.1998.A
Ich.find.den.Aufbau.blöd.Urlaub.2008.D
Ich.2009.Urlaub.Test
Würde da gerne ein Script drüber laufen lassen, was mir die Ordner so umbenennt, dass der Name ab einer bestimmten Stelle abgeschnitten wird und die "Punkte" durch Leerzeichen " " ersetzt werden.
Z.B in diesem Sollte es am Ende so ausschaun: - Die Stelle zum Abschneiden soll "2008" sein, "2008" und alles folgende soll weg.
Meine.Bilder.Urlaub.2008.I -> Meine Bilder Urlaub
Meine.Bilder.Sommer.Ferien.2008.D -> Meine Bilder Sommer Ferien
Meine.Bilder.Winter.Urlaub.2008.GB -> Meine Bilder Winter Urlaub
Meine.Bilder.Sommer.Da.2008.D -> Meine Bilder Sommer Da
Meine.Bilder.Winter.Hier.2008.CZ -> Meine Bilder Winter Hier
Meine.Bilder.Herbst.Urlaub.2008.D -> Meine Bilder Herbst Urlaub
Meine.Bilder.Zwischendurch.Urlaub.1998.A -> Meine Bilder Zwischendurch Urlaub
Ich.find.den.Aufbau.blöd.Urlaub.2008.D -> Ich find den Aufbau blöd Urlaub
Ich.2009.Urlaub.Test -> Ich.2009.Urlaub.Test
Die Auswahlstelle "2008" sollte wechselbar sein.
Hoffe da kann mir einer etwas basteln.
Mfg DAniel
ich habe folgendes Problem:
Ich habe ein Haufen von Ordnern derren Namen wie folgt aufgebaut ist:
Unterschiedlich lange Namen, nach jedem Wort ein "."
Meine.Bilder.Urlaub.2008.I
Meine.Bilder.Sommer.Ferien.2008.D
Meine.Bilder.Winter.Urlaub.2008.GB
Meine.Bilder.Sommer.Da.2008.D
Meine.Bilder.Winter.Hier.2008.CZ
Meine.Bilder.Herbst.Urlaub.2008.D
Meine.Bilder.Zwischendurch.Urlaub.1998.A
Ich.find.den.Aufbau.blöd.Urlaub.2008.D
Ich.2009.Urlaub.Test
Würde da gerne ein Script drüber laufen lassen, was mir die Ordner so umbenennt, dass der Name ab einer bestimmten Stelle abgeschnitten wird und die "Punkte" durch Leerzeichen " " ersetzt werden.
Z.B in diesem Sollte es am Ende so ausschaun: - Die Stelle zum Abschneiden soll "2008" sein, "2008" und alles folgende soll weg.
Meine.Bilder.Urlaub.2008.I -> Meine Bilder Urlaub
Meine.Bilder.Sommer.Ferien.2008.D -> Meine Bilder Sommer Ferien
Meine.Bilder.Winter.Urlaub.2008.GB -> Meine Bilder Winter Urlaub
Meine.Bilder.Sommer.Da.2008.D -> Meine Bilder Sommer Da
Meine.Bilder.Winter.Hier.2008.CZ -> Meine Bilder Winter Hier
Meine.Bilder.Herbst.Urlaub.2008.D -> Meine Bilder Herbst Urlaub
Meine.Bilder.Zwischendurch.Urlaub.1998.A -> Meine Bilder Zwischendurch Urlaub
Ich.find.den.Aufbau.blöd.Urlaub.2008.D -> Ich find den Aufbau blöd Urlaub
Ich.2009.Urlaub.Test -> Ich.2009.Urlaub.Test
Die Auswahlstelle "2008" sollte wechselbar sein.
Hoffe da kann mir einer etwas basteln.
Mfg DAniel
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 97884
Url: https://administrator.de/forum/script-zum-ordner-umbenennen-97884.html
Ausgedruckt am: 20.05.2025 um 05:05 Uhr
5 Kommentare
Neuester Kommentar
Servus,
sowas funktioniert auch mit dem TotalCommander. Hier gibts ein Mehrfach-Umbenenn-Tool.
Hier der link:
http://www.gishler.com
Gruß
eazy_isi
sowas funktioniert auch mit dem TotalCommander. Hier gibts ein Mehrfach-Umbenenn-Tool.
Hier der link:
http://www.gishler.com
Gruß
eazy_isi
Hallo Daniels88!
Falls Du gerade keinen totalen Commander zur Hand hast, sollte es auch so gehen:
Das "$"-Zeichen hinter "Repl=" darf in keinem Ordnernamen vorkommen, ansonsten durch ein anderes Zeichen ersetzen (etwa "§"). Einige Zeichen, wie "<>%&|" solltest Du dabei aber vermeiden.
Vor dem "ren"-Befehl steht derzeit noch ein "echo", damit Du gefahrlos testen kannst (dazu vielleicht noch vor Zeile 9 eine neue Zeile "pause" einfügen) - es werden so die Umbenennungsbefehle nur angezeigt, aber nicht ausgeführt; um tatsächlich den Namen zu ändern, einfach das "echo" entfernen.
Sollte übrigens der neue Ordnername schon vorhanden sein, wird der Ordner, welcher auf den selben Namen gebracht werden sollte, natürlich nicht umbenannt ...
Grüße
bastla
Falls Du gerade keinen totalen Commander zur Hand hast, sollte es auch so gehen:
@echo off & setlocal
set "Ordner=D:\Alle meine Fotos"
set Jahr=2008
set Repl=$
pushd "%Ordner%"
for /d %%i in (*.*) do call :ProcessDir "%%i"
popd
goto :eof
:ProcessDir
set "NameAlt=%~1"
call set "NameAlt=%%NameAlt:.%Jahr%=%Repl%%%"
for /f "delims=%Repl%" %%n in ("%NameAlt%") do set "NameNeu=%%n"
set "NameNeu=%NameNeu:.= %"
if not exist "%NameNeu%" echo ren %1 "%NameNeu%"
goto :eof
Vor dem "ren"-Befehl steht derzeit noch ein "echo", damit Du gefahrlos testen kannst (dazu vielleicht noch vor Zeile 9 eine neue Zeile "pause" einfügen) - es werden so die Umbenennungsbefehle nur angezeigt, aber nicht ausgeführt; um tatsächlich den Namen zu ändern, einfach das "echo" entfernen.
Sollte übrigens der neue Ordnername schon vorhanden sein, wird der Ordner, welcher auf den selben Namen gebracht werden sollte, natürlich nicht umbenannt ...
Grüße
bastla
Moin Daniels88,
</OT>
Ich dagegen hoffe, dieses Zitat kommt nur durch die stark verkürzte Darstellung so schräg rüber.
Sinn dieses Forums ist nicht, dass einige unermüdliche Helfer anderen für die Verwaltung der Urlaubstage Fix-und-Fertig-Rundum-Glücklich-Lösungen liefern.
Bitte speziell bei Code-Problemchen immer das zeigen, was schon vorhanden ist.
Oder was schon versucht wurde.
Allerdings: Die eigentliche Problembeschreibung finde ich vorbildlich!!
So etwas würde ich hier gerne öfter sehen.
</OT>
Schönes Wochenende allen
Biber
</OT>
ich habe folgendes Problem:
(hier steht eine Aufzählung von einem gefühlten Dutzend Urlaube, die Du Dir 2008 gegönnt hast
Hoffe da kann mir einer etwas basteln.
(hier steht eine Aufzählung von einem gefühlten Dutzend Urlaube, die Du Dir 2008 gegönnt hast
Hoffe da kann mir einer etwas basteln.
Ich dagegen hoffe, dieses Zitat kommt nur durch die stark verkürzte Darstellung so schräg rüber.
Sinn dieses Forums ist nicht, dass einige unermüdliche Helfer anderen für die Verwaltung der Urlaubstage Fix-und-Fertig-Rundum-Glücklich-Lösungen liefern.
Bitte speziell bei Code-Problemchen immer das zeigen, was schon vorhanden ist.
Oder was schon versucht wurde.
Allerdings: Die eigentliche Problembeschreibung finde ich vorbildlich!!
So etwas würde ich hier gerne öfter sehen.
</OT>
Schönes Wochenende allen
Biber
Hallo Daniels88!
Du könntest ja vorweg schon die Suchmaske anpassen:
damit würden nur die entsprechenden Ordner erfasst.
[Edit]
Um gleich einige Jahre angeben zu können, würde sich etwa folgende (ungetestete) Variante anbieten:
[/Edit]
[Edit2] Leider habe ich erst beim nochmaligen Lesen wirklich erkannt, wo das Problem mit mehreren Jahren liegt - daher (falls nicht ohnehin das frühere Jahr im Namen weiter vorne steht und bei aufsteigender Reihenfolge der zu behandelnden Jahre - wie in meinem Entwurf gleich oberhalb - ohnehin der Rest dahinter bereits eliminiert ist), einfach mehrere Zeilen der Art
nacheinander im ersten geposteten Batch verwenden (und die Variablen natürlich vorweg mit den entsprechenden Jahren belegen) - ist ein bestimmtes Jahr nicht enthalten, wird auch nichts ersetzt ...
[/Edit2]
Um beim "verflücken" (des ursprünglichen Batches) etwas zu helfen
:
Im für jeden Ordner aufgerufenen Unterprogramm ":ProcessDir" wird in Zeile 12 der Suchbegriff (ergänzt um den Punkt davor) durch "$" ersetzt - so kann in Zeile 13 der gesamte Name in den Teil vor dem Jahr (bzw jetzt eben schon "$") und den Rest (der nicht mehr interessiert) zerlegt werden und nur dieser erste Teil (ich hätte auch "tokens=1" schreiben können, das ist aber ohnehin default) als neuer Name verwendet.
In Zeile 14 werden dann in diesem neuen Namen die Punkte gegen Leerzeichen ausgetauscht.
Der Rest um diese Zeilen herum dürfte eigentlich klar sein ...
Grüße
bastla
P.S.: @Biber
Du könntest ja vorweg schon die Suchmaske anpassen:
for /d %%i in (*%Jahr%*.*) do call :ProcessDir "%%i"
[Edit]
Um gleich einige Jahre angeben zu können, würde sich etwa folgende (ungetestete) Variante anbieten:
@echo off & setlocal
set "Ordner=D:\Alle meine Fotos"
set Repl=$
pushd "%Ordner%"
for %%a in (2006 2007 2008) do (
for /d %%i in (*%%a*.*) do call :ProcessDir "%%i" "%%a"
)
popd
goto :eof
:ProcessDir
set "NameAlt=%~1"
call set "NameAlt=%%NameAlt:.%~2=%Repl%%%"
for /f "delims=%Repl%" %%n in ("%NameAlt%") do set "NameNeu=%%n"
set "NameNeu=%NameNeu:.= %"
if not exist "%NameNeu%" echo ren %1 "%NameNeu%"
goto :eof
[Edit2] Leider habe ich erst beim nochmaligen Lesen wirklich erkannt, wo das Problem mit mehreren Jahren liegt - daher (falls nicht ohnehin das frühere Jahr im Namen weiter vorne steht und bei aufsteigender Reihenfolge der zu behandelnden Jahre - wie in meinem Entwurf gleich oberhalb - ohnehin der Rest dahinter bereits eliminiert ist), einfach mehrere Zeilen der Art
call set "NameAlt=%%NameAlt:.%Jahr1%=%Repl%%%"
call set "NameAlt=%%NameAlt:.%Jahr2%=%Repl%%%"
call set "NameAlt=%%NameAlt:.%Jahr3%=%Repl%%%"
[/Edit2]
Um beim "verflücken" (des ursprünglichen Batches) etwas zu helfen
Im für jeden Ordner aufgerufenen Unterprogramm ":ProcessDir" wird in Zeile 12 der Suchbegriff (ergänzt um den Punkt davor) durch "$" ersetzt - so kann in Zeile 13 der gesamte Name in den Teil vor dem Jahr (bzw jetzt eben schon "$") und den Rest (der nicht mehr interessiert) zerlegt werden und nur dieser erste Teil (ich hätte auch "tokens=1" schreiben können, das ist aber ohnehin default) als neuer Name verwendet.
In Zeile 14 werden dann in diesem neuen Namen die Punkte gegen Leerzeichen ausgetauscht.
Der Rest um diese Zeilen herum dürfte eigentlich klar sein ...
Grüße
bastla
P.S.: @Biber
Bitte speziell bei Code-Problemchen immer das zeigen, was schon vorhanden ist. Oder was schon versucht wurde.
Manchmal ist's aber effizienter (insbes bei einer derart brauchbaren Problembeschreibung), sich gar nicht erst in einen anderen Code hineinlesen/-denken zu müssen ...