Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Script zum Ordner Umbenennen

Frage Entwicklung Batch & Shell

Mitglied: Daniels88

Daniels88 (Level 1) - Jetzt verbinden

25.09.2008, aktualisiert 26.09.2008, 9680 Aufrufe, 5 Kommentare

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.

Mit freundlichen Grüßen DAniel
Mitglied: eazy-isi
26.09.2008 um 07:39 Uhr
Servus,

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

Hier der link:

http://www.gishler.com

Gruß
eazy_isi
Bitte warten ..
Mitglied: bastla
26.09.2008 um 07:44 Uhr
Hallo Daniels88!

Falls Du gerade keinen totalen Commander zur Hand hast, sollte es auch so gehen:
01.
@echo off & setlocal 
02.
set "Ordner=D:\Alle meine Fotos" 
03.
set Jahr=2008 
04.
set Repl=$ 
05.
 
06.
pushd "%Ordner%" 
07.
for /d %%i in (*.*) do call :ProcessDir "%%i" 
08.
popd 
09.
goto :eof 
10.
 
11.
:ProcessDir 
12.
set "NameAlt=%~1" 
13.
call set "NameAlt=%%NameAlt:.%Jahr%=%Repl%%%" 
14.
for /f "delims=%Repl%" %%n in ("%NameAlt%") do set "NameNeu=%%n" 
15.
set "NameNeu=%NameNeu:.= %" 
16.
if not exist "%NameNeu%" echo ren %1 "%NameNeu%" 
17.
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
Bitte warten ..
Mitglied: Biber
26.09.2008 um 17:20 Uhr
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
Bitte warten ..
Mitglied: Daniels88
26.09.2008 um 17:38 Uhr
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

@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

Gruß Daniel
Bitte warten ..
Mitglied: bastla
26.09.2008 um 17:56 Uhr
Hallo Daniels88!

Du könntest ja vorweg schon die Suchmaske anpassen:
01.
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:
01.
@echo off & setlocal 
02.
set "Ordner=D:\Alle meine Fotos" 
03.
set Repl=$ 
04.
 
05.
pushd "%Ordner%" 
06.
for %%a in (2006 2007 2008) do ( 
07.
    for /d %%i in (*%%a*.*) do call :ProcessDir "%%i" "%%a" 
08.
09.
popd 
10.
goto :eof 
11.
 
12.
:ProcessDir 
13.
set "NameAlt=%~1" 
14.
call set "NameAlt=%%NameAlt:.%~2=%Repl%%%" 
15.
for /f "delims=%Repl%" %%n in ("%NameAlt%") do set "NameNeu=%%n" 
16.
set "NameNeu=%NameNeu:.= %" 
17.
if not exist "%NameNeu%" echo ren %1 "%NameNeu%" 
18.
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
01.
call set "NameAlt=%%NameAlt:.%Jahr1%=%Repl%%%" 
02.
call set "NameAlt=%%NameAlt:.%Jahr2%=%Repl%%%" 
03.
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 :

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 ...
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Batch & Shell
gelöst Per Script Ordner überwachen und Prog. ausfühern (9)

Frage von Knuefi zum Thema Batch & Shell ...

VB for Applications
gelöst VB Script rekursiv statt nur ein Ordner (4)

Frage von Saschaaaaa zum Thema VB for Applications ...

Windows 8
gelöst Benutzer kann plötzlich keine Ordner mehr umbenennen (3)

Frage von IllusionFACTORY zum Thema Windows 8 ...

VB for Applications
VBS Script zum versenden mehrerer Verknüpfungen zu Dateien per Lotus Notes

Frage von Sentinel87 zum Thema VB for Applications ...

Heiß diskutierte Inhalte
DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (13)

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...

Backup
Clients als Server missbrauchen? (9)

Frage von 1410640014 zum Thema Backup ...