cadsusi
Goto Top

Unterordner mit bestimmten Namen umbenennen per batch,...

bin leider noch nicht ganz firm in Punkto Programmierung ;(

Hallöchen,

ich habe folgendes Problemchen:

Innerhalb eines Ordners sollen die Unterordner, die bspw. "A" heißen in "X", "C" in "Y" und "D" in "Z" umbenannt werden (Unterordner können auch in der x-ten Ebene vorhanden sein).

Jetzt hatte ich mir vorgestellt, bspw. eine rename.bat oder ein vbs Progrämmchen in unserem Projekteordner abzulegen, welche alle Unterordner nach dem vorher anzugebenden Namen durchsucht, also bspw. "A" und dann, wenn vorhanden umbenennt in einen ebenfalls vorher anzugebenden Namen bspw. "X". Ich hoffe das es so in etwa machbar ist. Bisher hab ich nur Beiträge gefunden, die Dateien oder Dateiendungen umbenennen oder nur den Ordner in der ersten Ebene.

Kann mir da vielleicht jemand weiterhelfen? Betrifft rund 300 Ordner und darin in Ebene x ca. 14 Ordner mit Namen A, B, C, usw.

Vielen Dank im Voraus
LG Susi

Content-Key: 164198

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

Printed on: April 19, 2024 at 14:04 o'clock

Member: Biber
Biber Apr 08, 2011 at 07:47:46 (UTC)
Goto Top
Moin CADSusi,

willkommen im Forum.
Vielen Dank für deine durchaus brauchbare Beschreibung der Anforderung.
Die ist auch nicht so schwierig umzusetzen eigentlich, allerdings..

Allerdings muss beachtet werdet wueden, dass das übliche Vorgehen mit FOR/D bzw FOR/R im Batch (was ich als Werkzeug für diesen pilpul empfehlen würde) wahrscheinlich unelegant abgrätscht, wenn ein einer rekursiv abzuarbeitenden Verzeichnisstruktur die Parentordner plötzlich umbenannt sind.

Deshalb vorab noch die Klärung: Ist das jetzt einen einmalige Aktion, eine Sonderlocke, die jetzt nur von "A*" auf "X*", von "B*" auf "Y*" ändern soll oder ist das voraussichtlich ein wiederkehrend benötigter Ablauf, der flexibel gestaltet werden sollte?

Grüße
Biber
Member: Skyemugen
Skyemugen Apr 08, 2011 at 08:07:54 (UTC)
Goto Top
Aloha Susi,

zusätzlich zu Bibers Frage & Anmerkung würde es, so denke ich, auch wichtig sein, zu erfahren, ob der gesuchte Name auch als Teilname in einem anderen Ordner vorkommen kann (z.B. X existiert separat aber es gibt auch XB) oder sogar exakt mit diesem Namen in einem anderen Verzeichnis (wovon ich nicht ausgehe)?

greetz André
Member: bastla
bastla Apr 08, 2011 at 08:46:35 (UTC)
Goto Top
@Biber
wenn in einer rekursiv abzuarbeitenden Verzeichnisstruktur die Parentordner plötzlich umbenannt sind.
So aus dem Handgelenk (komme gerade leider nicht dazu): Ein "dir /s /b /ad|sort /r" sollte doch das Ganze vom Ende her aufdröseln (oder doch gleich VBS, wo sich die Rekursion besser steuern lässt) ...

Grüße
bastla
Member: CADSusi
CADSusi Apr 08, 2011 at 09:51:08 (UTC)
Goto Top
hallöchen,

vielen Dank!

Absolut einmalig die Aktion.

Hintergrund ist, daß diese Ordner als Arbeitsbereich für die einzelnen Bearbeiter dient. Nun haben wir den Fehler gemacht, diese nur mit dem Vornamen des Bearbeiters zu versehen. Seit kurzem haben wir aber bspw. 2 x Arnold... Um nicht mit Zahlen arbeiten zu müssen, wo letztlich nur ein Teil der Mitarbeiter sich merken kann welche Zahl zu wem gehört, würd ich es einfach am Loginnamen orientieren wollen. Ist zwar auch nicht 100% sicher vor Dopplungen bei Meier, Schulze und Schmidt, aber schon besser.

LG Susi

edit: Innerhalb des Parentordners sollten denk ich keine Ordner mit dem Namen vorkommen. Aber gänzlich ausschließen kann ich´s leider nicht. Ich kann aber garantieren, daß es sich um die 3. Unterebene handelt.

Stammordner (in dem die .bat liegt) - Jahr - Projektnummer - "A" ; "B" ; "C" usw.
Member: CADSusi
CADSusi Apr 08, 2011 at 09:57:42 (UTC)
Goto Top
hallihallo,

nein keine Teile oder Teilnamen. Betreffender Ordner heißt "A" und ist umzubennen in "X". In Betracht kommen allerdings nur Unterordner des Verzeichnisses (Ordners), in dem auch die name.bat oder VBS liegt.

LG Susi
Mitglied: 60730
60730 Apr 08, 2011 at 11:30:43 (UTC)
Goto Top
salü,

ist das Ziel wirklich die Ordner umzubenennen?

Oder eher doch - wenn der "neue"Ordner bereits existiert den Inhalt in den vorhandenen Ordner zu schieben und den "alten" Ornder zu löschen?

Das ist ein kleiner aber feiner unterschied. - wie der untere Abschnitt zeigt...

N:\testing>md 12

N:\testing>md 123

N:\testing>tree
Auflistung der Ordnerpfade für Volume X
Volumenummer: 0815
N:.
├───12
└───123

N:\testing>

N:\testing>echo 12>12\12.ini
N:\testing>echo 123>123\123.ini
N:\testing>move 12 123

N:\testing>tree
Auflistung der Ordnerpfade für Volume X
Volumenummer: 0815
N:.
└───123
    └───12

N:\testing>

Gruß
Member: CADSusi
CADSusi Apr 08, 2011 at 11:41:45 (UTC)
Goto Top
hi,

Ziel ist wirklich nur umbenennen von Unterordnern innerhalb eines Ordners.

Projekte
     |---Jahr1
     |       |---Projektnr.1
     |       |           |---"A"  umbenennen in  "X"
     |       |           |---"B"  umbenennen in  "Y"
     |       |           |---................
     |       |---Projektnr.2
     |       |           |---"A"  umbenennen in  "X"
     |       |           |---"B"  umbenennen in  "Y"
     |       |           |---................
     |       |---................
     |---Jahr2
     |       |---Projektnr.1
     |       |           |---"A"  umbenennen in  "X"
     |       |           |---"B"  umbenennen in  "Y"
     |       |           |---................
     |       |---Projektnr.2
     |       |           |---"A"  umbenennen in  "X"
     |       |           |---"B"  umbenennen in  "Y"
     |       |           |---................
     |       |---................


Hoffe so ist´s verständlicher...

LG Susi
Member: Biber
Biber Apr 08, 2011 at 11:49:04 (UTC)
Goto Top
Moin CADSusi,

ich bin auch immer noch nicht sicher, ob ich die Verzeichnisstruktur jetzt richtig interpretiere.
[Edit] Das habe ich geschrieben, bevor ich CADSusis Kommentar über mir gelesen hatte. Hat sich überschnitten.[Edit]

in meiner Vorstellung sieht das so aus (mein "Rootverzeichnis" ist D:\temp, darunter ein Ordner 2010 mit dieser Unterstruktur)
(=13:34:46  D:\temp=)
>dir /s /b /ad 2010
D:\temp\2010\A
D:\temp\2010\B
D:\temp\2010\A\whatever
D:\temp\2010\A\whatever\A
D:\temp\2010\A\whatever\B
D:\temp\2010\B\andere
D:\temp\2010\B\other
D:\temp\2010\B\andere\B
D:\temp\2010\B\other\A
D:\temp\2010\B\other\B
D:\temp\2010\B\other\C

--oder, wie bastla sortieren würde:

>dir /s /b /ad 2010|sort /r"
D:\temp\2010\B\other\C
D:\temp\2010\B\other\B
D:\temp\2010\B\other\A
D:\temp\2010\B\other
D:\temp\2010\B\andere\B
D:\temp\2010\B\andere
D:\temp\2010\B
D:\temp\2010\A\whatever\B
D:\temp\2010\A\whatever\A
D:\temp\2010\A\whatever
D:\temp\2010\A

Ich sehe nach deiner Beschreibung nur 2 Fälle:
-Entweder ein umzubenennendes "A","B" oder "C" in einer Zwischenebene unterhalb 2010, aber mit Unterverzeichnissen
- oder am Ende einer Verzeichnisstruktur (ohne Unterordner)

Die beiden Fälle würde ich auch separat abhandeln.
Am Ende eines Pfades:
>for /F %i in ('dir /ad /b /s 2010\A' ) do @if "%~ni"=="A" @echo ren "%i" X
ren "D:\temp\2010\A\whatever\A" X

(=13:42:50  D:\temp=)
>for /F %i in ('dir /ad /b /s 2010\B' ) do @if "%~ni"=="B" @echo ren "%i" Y
ren "D:\temp\2010\B\andere\B" Y
ren "D:\temp\2010\B\other\B" Y

(=13:43:05  D:\temp=)
>for /F %i in ('dir /ad /b /s 2010\C' ) do @if "%~ni"=="C" @echo ren "%i" Z
ren "D:\temp\2010\B\other\C" Z

Bei einer einmaligen Aktion würde ich das auch über CMD-Prompt abfackel, bevor ich da noch weitere kunstvolle FOR-Anweisungen drumwickele.

Sind erst die End-Verzeichnisse umbenannt, dann kommen die Zwischenebenen dran.
>for /r /d %i in (2010\* ) do @if /i "%~ni"=="A" @echo ren "%i" X
ren "D:\temp\2010\A" X

(=13:45:15  D:\temp=)
>for /r /d %i in (2010\* ) do @if /i "%~ni"=="B" @echo ren "%i" Y
ren "D:\temp\2010\B" Y
...

...also eigentlich ganz schmerzfrei.

Batches oder Skripte schreibe ich eigentlich nur, wenn ich sie auch mehrfach verwenden kann.
Für einfache "kannste-ma'-eben"-Anforderungen sollte der CMD-Prompt ausreichen.

Grüße
Biber
Member: bastla
bastla Apr 08, 2011 at 12:21:05 (UTC)
Goto Top
Hallo @all!

Dachte mir schon, dass da nicht mehr viel zu tun bleibt ... face-wink

... aber, um den Gedanken von oben zu Ende zu bringen:
>for /f "delims=" %i in ('dir /s /b /ad D:\temp\A^|sort /r') do @echo ren "%i" X
Durch die absteigende Sortierung werden die längeren Pfade zuerst behandelt, womit das "Sich-selbst-den-Boden-unter-den-Füßen-Wegziehen" vermieden werden sollte.

Grüße
bastla
Member: Biber
Biber Apr 08, 2011 at 16:05:51 (UTC)
Goto Top
@bastla
Zitat von @bastla:
... aber, um den Gedanken von oben zu Ende zu bringen:
>for /f "delims=" %i in ('dir /s /b /ad D:\temp\A^|sort /r') do @echo ren "%i" X
> 
Durch die absteigende Sortierung werden die längeren Pfade zuerst behandelt, womit das
"Sich-selbst-den-Boden-unter-den-Füßen-Wegziehen" vermieden werden sollte.
Hast du meinen POC zu dem Thema "SORT" im meinem Kommentar gesehen?

Grüße
Biber
Member: bastla
bastla Apr 08, 2011 at 18:38:22 (UTC)
Goto Top
@Biber
Hast du meinen POC zu dem Thema "SORT" im meinem Kommentar gesehen?
Das ja - wollte nur hinsichtlich der Umsetzung komplettieren ...

Schönes Wochenende
bastla
Member: Biber
Biber Apr 10, 2011 at 18:02:37 (UTC)
Goto Top
Sache ma', Susi,

müssen wir dein "Vielen Dank im Voraus" wörtlich nehmen oder kommt noch ein Feedbäckle? Oder grünes Häkle?

Grüße
Biber
Member: CADSusi
CADSusi Apr 11, 2011 at 11:43:54 (UTC)
Goto Top
Hi und sorry für die späte Rückmeldung,

mußte hier noch was anderes zwischenschieben und hatte am WE recht viel privaten Kram zu erledigen. Meld mich gleich nachdem ich mit probieren durch bin (hoffentlich auch gleich mit grünem Häckle).

LG Susi
Member: Biber
Biber Apr 11, 2011 at 11:50:06 (UTC)
Goto Top
Moin CADSusi,

den Satz mit dem privaten Kram und dem Was-dazwischenschieben-müssen, den lass mal ich unkommentiert.
Frühling ist's...
Aber setz ggf. ein grünes Häkchen oder Häkle, aber kein Häckle oder Häckchen bitte.

Bis dahin
Biber
Member: CADSusi
CADSusi Apr 11, 2011 at 13:28:41 (UTC)
Goto Top
Danke an Alle Helfer

It´s done face-smile