Mehrere Ordner eine Ebene höher verschieben
Hi
Ich habe einen Ordner Kunden, wo alle Kundenordner drin sind (Kunde A, Kunde B usw.) In jedem Kundenordner gibt es einen Ordner 2008, wo mehrer Unterordner drin sind. Da wir den Ordner 2008 nicht mehr benötigen, sollen alle Unterordner der jeweiligen Kunden aus 2008 eine Ebene höher verschoben werden. Also direkt als Unterordner von Kunde A usw.. Da es ziemlich viele Ordner sind, würde ich das gerne automatisieren. Gibt es da eine Möglichkeit?
Vielen Dank
Chris
Ich habe einen Ordner Kunden, wo alle Kundenordner drin sind (Kunde A, Kunde B usw.) In jedem Kundenordner gibt es einen Ordner 2008, wo mehrer Unterordner drin sind. Da wir den Ordner 2008 nicht mehr benötigen, sollen alle Unterordner der jeweiligen Kunden aus 2008 eine Ebene höher verschoben werden. Also direkt als Unterordner von Kunde A usw.. Da es ziemlich viele Ordner sind, würde ich das gerne automatisieren. Gibt es da eine Möglichkeit?
Vielen Dank
Chris
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 105769
Url: https://administrator.de/forum/mehrere-ordner-eine-ebene-hoeher-verschieben-105769.html
Ausgedruckt am: 18.04.2025 um 05:04 Uhr
4 Kommentare
Neuester Kommentar
@moesch123
Vielleicht wäre chris123 mit "move" und "rd" eher gedient, etwa:
Vorweg:
Da aus der Problembeschreibung nicht hervorgeht, ob sich in "2008" nur Unterordner oder auch Dateien befinden können, werden auch letztere berücksichtigt.
Soferne ein gleichnamiger Ordner bereits im Kundenordner existiert (also etwa "Kunde A\Anfragen" und "Kunde A\2008\Anfragen"), kann der Ordner (trotz Abfrage nach einem "Überschreiben" und unabhängig von der Antwort) nicht verschoben werden - der Batch läuft allerdings für die übrigen Ordner / Kunden weiter. Anders ist dies hinsichtlich bereits vorhandener Dateien - diese werden automatisch (also ohne Rückfrage) überschrieben!
Zum Code:
Mit dem in Zeile 2 festgelegten Ordner ist der "Überordner" von "Kunde A", "Kunde B" etc gemeint. Bitte zu beachten, dass dieser Ordner mit einem "\" am Ende geschrieben werden muss.
Die beiden "echo" vor den "move"-Befehlen simulieren (zum Testen) das Verschieben von Ordnern bzw Dateien durch Ausgabe des entsprechenden Befehles - erst, wenn diese "echo" entfernt sind, wird verschoben, und erst dann kann durch die Zeile 9 der zurückbleibende leere Ordner "2008" gelöscht werden.
Als "leer" gilt dieser Ordner, wenn sich darin und in ev verbliebenen Unterordnern keine Dateien mehr befinden. Damit nicht unbeabsichtigt eine vorhandene, aber keine Dateien beinhaltende Ordnerstuktur schon beim Testen gelöscht wird, ist der "rd"-Befehl ebenfalls durch ein vorangestelltes "echo" vorerst "entschäft" - daher im Ernstfall auch dieses letzte "echo" noch entfernen ...
Als "kosmetisches" Detail: Damit die verschobenen Einzeldateien nicht angezeigt werden, kann die Zeile 8 (nur, wenn wirklich verschoben werden soll!) durch
ersetzt werden - sieht etwas ordentlicher aus ... 
Grüße
bastla
Vielleicht wäre chris123 mit "move" und "rd" eher gedient, etwa:
@echo off & setlocal
set "Basis=D:\Kunden\"
for /d %%i in ("%Basis%*.*") do (
if exist "%%i\2008\" (
echo Bearbeite: %%i
for /d %%a in ("%%i\2008\*.*") do echo move "%%a" "%%i"
dir "%%i\2008\" /a-d /w >nul 2>&1 && echo move "%%i\2008\*.*" "%%i"
dir "%%i\2008\" /s /a-d /w >nul 2>&1 || echo rd "%%i\2008"
)
)
Da aus der Problembeschreibung nicht hervorgeht, ob sich in "2008" nur Unterordner oder auch Dateien befinden können, werden auch letztere berücksichtigt.
Soferne ein gleichnamiger Ordner bereits im Kundenordner existiert (also etwa "Kunde A\Anfragen" und "Kunde A\2008\Anfragen"), kann der Ordner (trotz Abfrage nach einem "Überschreiben" und unabhängig von der Antwort) nicht verschoben werden - der Batch läuft allerdings für die übrigen Ordner / Kunden weiter. Anders ist dies hinsichtlich bereits vorhandener Dateien - diese werden automatisch (also ohne Rückfrage) überschrieben!
Zum Code:
Mit dem in Zeile 2 festgelegten Ordner ist der "Überordner" von "Kunde A", "Kunde B" etc gemeint. Bitte zu beachten, dass dieser Ordner mit einem "\" am Ende geschrieben werden muss.
Die beiden "echo" vor den "move"-Befehlen simulieren (zum Testen) das Verschieben von Ordnern bzw Dateien durch Ausgabe des entsprechenden Befehles - erst, wenn diese "echo" entfernt sind, wird verschoben, und erst dann kann durch die Zeile 9 der zurückbleibende leere Ordner "2008" gelöscht werden.
Als "leer" gilt dieser Ordner, wenn sich darin und in ev verbliebenen Unterordnern keine Dateien mehr befinden. Damit nicht unbeabsichtigt eine vorhandene, aber keine Dateien beinhaltende Ordnerstuktur schon beim Testen gelöscht wird, ist der "rd"-Befehl ebenfalls durch ein vorangestelltes "echo" vorerst "entschäft" - daher im Ernstfall auch dieses letzte "echo" noch entfernen ...
Als "kosmetisches" Detail: Damit die verschobenen Einzeldateien nicht angezeigt werden, kann die Zeile 8 (nur, wenn wirklich verschoben werden soll!) durch
dir "%%i\2008\" /a-d /w >nul 2>&1 && move "%%i\2008\*.*" "%%i" >nul
Grüße
bastla
Hallo chris123!
Ein ganzes Bild für eine Fehlermeldung?
Du kannst ja bequem Text aus einem CMD-Fenster kopieren, wenn Du zunächst auf das Systemmenüfeld ganz links in der Titelleiste des CMD-Fensters klickst, dort "Eigenschaften" wählst und unter "Bearbeitungsoptionen" den "QuickEdit-Modus" aktivierst. Beim Schließen des Dialoges solltest Du noch festlegen, dass diese Einstellung für "alle Fenster mit gleichem Namen" gelten soll.
Danach kannst Du einfach mit der Maus im CMD-Fenster Text markieren und diesen per Rechtsklick in die Zwischenablage kopieren, bzw, wenn kein Text markiert ist, per Rechtsklick aus der Zwischenablage in das CMD-Fenster Text einfügen.
Leider
erhalte ich bei einem Test mit Deinem Batch keine Fehlermeldung ...
Grüße
bastla
Ein ganzes Bild für eine Fehlermeldung?
Du kannst ja bequem Text aus einem CMD-Fenster kopieren, wenn Du zunächst auf das Systemmenüfeld ganz links in der Titelleiste des CMD-Fensters klickst, dort "Eigenschaften" wählst und unter "Bearbeitungsoptionen" den "QuickEdit-Modus" aktivierst. Beim Schließen des Dialoges solltest Du noch festlegen, dass diese Einstellung für "alle Fenster mit gleichem Namen" gelten soll.
Danach kannst Du einfach mit der Maus im CMD-Fenster Text markieren und diesen per Rechtsklick in die Zwischenablage kopieren, bzw, wenn kein Text markiert ist, per Rechtsklick aus der Zwischenablage in das CMD-Fenster Text einfügen.
Leider
Grüße
bastla