daniels88
Goto Top

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

Content-Key: 97884

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

Printed on: April 25, 2024 at 01:04 o'clock

Member: eazy-isi
eazy-isi Sep 26, 2008 at 05:39:14 (UTC)
Goto Top
Servus,

sowas funktioniert auch mit dem TotalCommander. Hier gibts ein Mehrfach-Umbenenn-Tool.

Hier der link:

http://www.gishler.com

Gruß
eazy_isi
Member: bastla
bastla Sep 26, 2008 at 05:44:56 (UTC)
Goto Top
Hallo Daniels88!

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
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
Member: Biber
Biber Sep 26, 2008 at 15:20:24 (UTC)
Goto Top
Moin Daniels88,
</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.

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
Member: Daniels88
Daniels88 Sep 26, 2008 at 15:38:27 (UTC)
Goto Top
Hallo zusammen,

gerade konnte ich die Umsetzung meines Problems versuchen.

Erstmal vorweg
@ Biber:
Das mit den Bildern war spontan, mir viel nichts besseres ein. Im Grunde sind es Ordner auf einem Server, nur die wollte ich so nicht ausstellen. Aber der Aufbau der Namen und der Sinn ist der gleiche.
Ich stimme dir vollkommen zu, dass es hier nicht so sein sollte das sich hier Leute wie "bastla" ständig die Mühe machen und die Leute ohne selber zu Arbeiten, ohne Nachzudenken, sich ausruhen und nur einfach das fertige am Ende abgreifen.
Nächstes mal werde ich mein Anfang noch Einfügen, weil ich geb zu ich hatte schon einen Anfang... nur war ich gespannt ob es auch vollkommen anders geht ;) und das tut es scheinbar face-smile

@bastla
Vielen Dank schon mal für dieses erste Script, ich habs in ner kleinen Test-Ordner-Struktur versucht und es Funktioniert ! *super*
ABER: Habe das Problem das es nicht immer "2008" ist, aber wenn ich einmal ausgeführt habe er ALLE Ordner zumindest die "." wegnimmt.
Dannach kann ich nicht mit einem anderen Kriterium "2007" nocheinmal starten, weil er den Aufbau mit den Punkten ja nicht mehr hat.
Gibts die Chance auf mehrere Suchkriterien.

Meine.Bilder.Türkei.2007.Holiday.und.2008.Test

-Nach einer Ausführung mit "2008" hab ich:
Meine Bilder Türkei 2007 Holiday und
-Nun sollte aber auch alles davor weg.
Leider stecken in JEDEM Ordner immer 2008 und dazu in vielen halt noch vorrausstehend etwas anderes wie hier "2007" so das Jeder Ordner einbezogen wird, sonst könnte man das ja Nach einander machen. Vielleicht kann man da ja etwas anpassen.

Ich übe mich in dieser Zeit das erste Script für mich zu verflücken das ich die einzelnen Teile verstehe und vllt selbst etwas tun kann.

Gerade wünsch ich mir ich könnte die richtigen Ordner posten face-sad

Gruß Daniel
Member: bastla
bastla Sep 26, 2008 at 15:56:45 (UTC)
Goto Top
Hallo Daniels88!

Du könntest ja vorweg schon die Suchmaske anpassen:
for /d %%i in (*%Jahr%*.*) do call :ProcessDir "%%i"  
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:
@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
[/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
call set "NameAlt=%%NameAlt:.%Jahr1%=%Repl%%%"  
call set "NameAlt=%%NameAlt:.%Jahr2%=%Repl%%%"  
call set "NameAlt=%%NameAlt:.%Jahr3%=%Repl%%%"  
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 face-wink:

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 ...