Mehrere Verzeichnisse umbennen
Hey Leute,
bisher habe ich immer eine Antwort auf meine Fragen in dem Forum hier gefunden. Ja... bisher! Denn jetzt finde ich keine Lösung für mein Problem. Aber ich hoffe (und weiß), ihr könnt mir helfen!
Also, hier mein "Problemchen":
In meinem Verzeichnis (H:\test\) sind etliche Order von Typ (12345_abc, 01234_xyz, ...). Jeder dieser Ordner hat wieder eine feste Unterorder-Struktur. Nun möchte ich nahezu jeden dieser Unterorder (in jedem Ordner) umbennenen. Ich habe auch schon eine kleine Batch geschrieben, aber irgendwie will die nicht so ganz, wie ich es gerne hätte. Hier mein Entwurf:
Wo liegt das Problem bei dem Batch-File?
Schon mal vielen Dank für Eure Hilfe!
Gruß
Flo
bisher habe ich immer eine Antwort auf meine Fragen in dem Forum hier gefunden. Ja... bisher! Denn jetzt finde ich keine Lösung für mein Problem. Aber ich hoffe (und weiß), ihr könnt mir helfen!
Also, hier mein "Problemchen":
In meinem Verzeichnis (H:\test\) sind etliche Order von Typ (12345_abc, 01234_xyz, ...). Jeder dieser Ordner hat wieder eine feste Unterorder-Struktur. Nun möchte ich nahezu jeden dieser Unterorder (in jedem Ordner) umbennenen. Ich habe auch schon eine kleine Batch geschrieben, aber irgendwie will die nicht so ganz, wie ich es gerne hätte. Hier mein Entwurf:
@ECHO OFF
SET verzeichnis=H:\test
FOR /D %a in ('DIR %verzeichnis% /AD /S /B') DO (
IF EXIST %verzeichnis%\*\*010*\020_test REN %verzeichnis%\*\010*\umbenannt
:: hier würden jetzt noch mehr IF-EXIST-Anweisungen zum Umbennen kommen... ::
)
Wo liegt das Problem bei dem Batch-File?
Schon mal vielen Dank für Eure Hilfe!
Gruß
Flo
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Kommentar vom Moderator Biber am 19.01.2010 um 19:52:47 Uhr
Mehrere Verzeichnisse umbennen
Set /a rgc+=1643
Content-ID: 133847
Url: https://administrator.de/forum/mehrere-verzeichnisse-umbennen-133847.html
Ausgedruckt am: 24.05.2025 um 10:05 Uhr
7 Kommentare
Neuester Kommentar
Hallo flo7689 und willkommen im Forum!
Übrigens: Damit wir dann alle Varianten durch hätten
:
Weiters kann "
Grüße
bastla
Wo liegt das Problem bei dem Batch-File?
Zunächst musst Du Dich entscheiden, ob Du eine "for /d
"-Schleife (= nur für eine Unterverzeichnisebene) oder eine "for /f
"-Schleife verwenden willst - derzeit ist es eine (wie Du schon bemerkt hast) unbrauchbare Mischung ...Übrigens: Damit wir dann alle Varianten durch hätten
for /r "%verzeichnis%" %a in (.) do ...
if exist
" für den letzten Pfadbestandteil Platzhalterzeichen ("*
" oder "?
") verarbeiten, aber nicht für mehrere Verzeichnisebenen - Abhilfe schaffen könnte hier eine stufenweise Bearbeitung mit mehreren "for /d
" oder ein passendes "findstr
" ...Grüße
bastla
Hallo flo7689!
Falls das nicht genügt, solltest Du Dein Vorhaben etwas genauer (insbes hinsichtlich konstanter / variabler Pfadbestandteile) beschreiben ...
Grüße
bastla
Ach du schreck... verschachtelte FOR-Anweisungen!?!? Wie soll das denn dann aussehen?
Die Verschachtelung ist relativ einfach durchzuführen:for /d %a in ("%verzeichnis%\*.*") do @for /d %b in ("%a\*010*.*") @do for /d %c in ("%b\*.*") do @echo %~fc
Mit FINDSTR kann ich aber keinen Befehl danach ausführen. So wie ich das momentan sehe... Oder etwa doch!?
Lässt sich einfach verknüpfen:... echo %c|findstr /e "020_test">nul && ren ...
Grüße
bastla
Hallo FloohneZahlen 
Das Schema könnte etwa so aussehen:
Die Unterscheidung zwischen "rot" und "blau" habe ich (da Du dafür keine Kriterien angegeben hattest) anhand des Namensbestandteiles "Allgemein" getroffen ...
Grüße
bastla
Das Schema könnte etwa so aussehen:
@echo off & setlocal
set "Basis=D:\Dies und Das\test"
set "Besuch=020_Besuch"
for /d %%a in ("%Basis%\*.*") do (
for /d %%b in ("%%a\*_*_Allgemein") do (
for /f "delims=_" %%i in ("%%~nxb") do (
if exist "%%b\%Besuch%" ren "%%b\%Besuch%" "%%i_%Besuch%"
)
)
)
Grüße
bastla
Hallo flo!
Die Schleife in Zeile 5 geht alle Unterordner des Basis-Ordners durch (in Deinem Beispiel demnach "01234tester" und "12345test") - die stehen dann jeweils in "%%a".
Zeile 6 macht das selbe für jeden der Unterordner aus Zeile 5, allerdings mit der Einschränkung auf den Namensbestandteil "*_*_Allgemein (daher: "01234tester\01234_000_Allgemein" und "12345test\12345_000_Allgemein")
Die Zeile 7 sorgt für das Entnehmen des ersten Teiles (anhand des Trennzeichens "_") aus dem Ordnernamen von "%%b" - in "%%i" steht dann demnach "01234" bzw "12345"
Zeile 8 überprüft, ob es im Ordner "%%b" einen Unterordner "020_Besuch" (da diese Bezeichnung mehrfach benötigt wird, verwende ich dafür eine Variable) gibt und führt ggf die Umbenennung unter Verwendung der schon bekannten Variablen durch
BTW: Genauer wäre die Zeile 8 mit einem zusätzlichen "\", damit tatsächlich nach einem Ordner gesucht wird:
Leichter nachvollziehbar wird das Ganze, wenn Du zwischen die einzelnen "for"-Zeilen jeweils ein "echo" einbaust - also zB zwischen Zeile 5 und 6 ein "
Grüße
bastla
Die Schleife in Zeile 5 geht alle Unterordner des Basis-Ordners durch (in Deinem Beispiel demnach "01234tester" und "12345test") - die stehen dann jeweils in "%%a".
Zeile 6 macht das selbe für jeden der Unterordner aus Zeile 5, allerdings mit der Einschränkung auf den Namensbestandteil "*_*_Allgemein (daher: "01234tester\01234_000_Allgemein" und "12345test\12345_000_Allgemein")
Die Zeile 7 sorgt für das Entnehmen des ersten Teiles (anhand des Trennzeichens "_") aus dem Ordnernamen von "%%b" - in "%%i" steht dann demnach "01234" bzw "12345"
Zeile 8 überprüft, ob es im Ordner "%%b" einen Unterordner "020_Besuch" (da diese Bezeichnung mehrfach benötigt wird, verwende ich dafür eine Variable) gibt und führt ggf die Umbenennung unter Verwendung der schon bekannten Variablen durch
BTW: Genauer wäre die Zeile 8 mit einem zusätzlichen "\", damit tatsächlich nach einem Ordner gesucht wird:
if exist "%%b\%Besuch%\" ren "%%b\%Besuch%" "%%i_%Besuch%"
echo %%a
", oder während der Testphase "echo on" anstelle von "echo off" verwendest (und den Batch von der Kommandozeile startest) ...Wenn ich nun mehr ändern will, dann muss ich mehrere for-Verschachtelungen machen (und anpassen), oder?
Ja; für jede weitere Ebene kannst Du eine weitere "for /d
"-Schleife hinzufügen.Grüße
bastla