Alle (Unter-)Unterordner per Batch in darüberliegendes Verzeichnis verschieben
Hallo zusammen,
Ausgangssituation:
ich habe einen PC mit einer Verzeichnisstruktur die für Windows zu lange ist.
Resultat:
Ordner können nicht mehr gelöscht werden, obwohl keine Dateien und voller Zugriffsrechte vorhanden sind.
Bisherige Versuche:
Durch Recherche im Netz habe ich erfahren dass man die Ordner zumindest noch verschieben kann, also vom Unterordner in den Hauptordner (und das über ca. 20 - 25 Ebenen).
Danach ist ein Löschen möglich. Ich wollte nun mit dem Move-Befehl die Verzeichnisse verschieben, aber das scheint ja nur mit Dateien zu funktionieren...
Weiß jemand wie das mit den (Unter-(Unter-(Unter-(usw.))))Unterordnern geht?
Gruß
Larz
Ausgangssituation:
ich habe einen PC mit einer Verzeichnisstruktur die für Windows zu lange ist.
Resultat:
Ordner können nicht mehr gelöscht werden, obwohl keine Dateien und voller Zugriffsrechte vorhanden sind.
Bisherige Versuche:
Durch Recherche im Netz habe ich erfahren dass man die Ordner zumindest noch verschieben kann, also vom Unterordner in den Hauptordner (und das über ca. 20 - 25 Ebenen).
Danach ist ein Löschen möglich. Ich wollte nun mit dem Move-Befehl die Verzeichnisse verschieben, aber das scheint ja nur mit Dateien zu funktionieren...
Weiß jemand wie das mit den (Unter-(Unter-(Unter-(usw.))))Unterordnern geht?
Gruß
Larz
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 100800
Url: https://administrator.de/forum/alle-unter-unterordner-per-batch-in-darueberliegendes-verzeichnis-verschieben-100800.html
Ausgedruckt am: 10.04.2025 um 07:04 Uhr
13 Kommentare
Neuester Kommentar
Hallo Larz!
Sollte eigentlich so gehen:
Ansonsten sollte der Zugriff auf die tiefer liegenden Ordner aber auch klappen, wenn Du den "Weg" mit
verkürzt (anstelle von "K" tut es natürlich jeder freie Laufwerksbuchstabe).
Mit
gibst Du den Buchstaben "K" wieder frei.
Grüße
bastla
[Edit] Pfadangabe bei "subst" korrigiert. [/Edit]
Sollte eigentlich so gehen:
@echo off & setlocal
set "Quelle=D:\Dein\langer\Pfad\zu\den\Unterordnern"
set "Ziel=D:\KurzerPfad"
if not exist "%Ziel%" md "%Ziel%"
for /d %%i in ("%Quelle%\*.*") do if not exist "%Ziel%\%%~nxi" move "%%i" "%Ziel%"
subst K: "D:\Dein\langer\Pfad\zu\den\Unterordnern"
Mit
subst K: /d
Grüße
bastla
[Edit] Pfadangabe bei "subst" korrigiert. [/Edit]
Hallo Larz!
Eigentlich sollte es doch genügen, wenn Du den Großteil des Pfades (durch Angabe als %Quelle%) entfernst (wodurch, in meinem Beispiel oben, aus "D:\Dein\langer\Pfad\zu\den\Unterordnern\EinUnterordner" dann eben "D:\KurzerPfad\EinUnterordner" und damit wieder vernünftig handhabbar wird) - oder verstehe ich da etwas gründlich falsch?
Grüße
bastla
... zwar alle verschiebt, aber in der bestehenden Ordnerstruktur belässt ...
... was ich ja grundsätzlich sinnvoll finde ...Eigentlich sollte es doch genügen, wenn Du den Großteil des Pfades (durch Angabe als %Quelle%) entfernst (wodurch, in meinem Beispiel oben, aus "D:\Dein\langer\Pfad\zu\den\Unterordnern\EinUnterordner" dann eben "D:\KurzerPfad\EinUnterordner" und damit wieder vernünftig handhabbar wird) - oder verstehe ich da etwas gründlich falsch?
Grüße
bastla

Moinsen larz,
an deiner Stelle würde ich den 2. Ansatz von Bastla weiterverfolgen.
Woher soll das Script "wissen" welcher Ordner gerade noch zu erkennen ist - aber dann nicht mehr zu verschieben ist, weil der Pfad zu lange ist...
"Normalerweise" hat so eine Unterunterunter struktur ja auch irgendeinen Sinn - da würde ich lieber selbst Hand anlegen, als eine Batch zu bemühen.
Gruß
an deiner Stelle würde ich den 2. Ansatz von Bastla weiterverfolgen.
Woher soll das Script "wissen" welcher Ordner gerade noch zu erkennen ist - aber dann nicht mehr zu verschieben ist, weil der Pfad zu lange ist...
"Normalerweise" hat so eine Unterunterunter struktur ja auch irgendeinen Sinn - da würde ich lieber selbst Hand anlegen, als eine Batch zu bemühen.
Gruß

@ Bastla
eh klar
ich würde - nachdem ich mr die frage nochmal angesehen habe - eher zu folgender (ungetester Lösung) tendieren:
Er will ja eigentlich nicht moven, sondern nur die leeren löschen.
Und dann "schön" manuell eine neue Ordnung - oder mittels Batch schaffen.
PS: Ich hatte noch keinen Kaffe
- möglich das der Ansatz voll daneben ist.
eh klar
ich würde - nachdem ich mr die frage nochmal angesehen habe - eher zu folgender (ungetester Lösung) tendieren:
subst K: "D:\Dein\langer\Pfad\zu\den\Unterordnern"
FOR /F "delims=" %%i in ('dir /b /s /ad k:') do rd "%%i" 2>NUL
Er will ja eigentlich nicht moven, sondern nur die leeren löschen.
Und dann "schön" manuell eine neue Ordnung - oder mittels Batch schaffen.
PS: Ich hatte noch keinen Kaffe
Hallo Larz!
Wenn der Pfad noch immer zu lang ist, dann vielleicht besser so:
Damit wird nur die in der ersten Zeile angegebene Ebene abgearbeitet, wobei die Unter-Unterordner gleich mit gelöscht werden.
Sollte das noch immer nicht klappen, musst Du eben den Pfad in Zeile 1 noch tiefer ansetzen.
Grüße
bastla
Wenn der Pfad noch immer zu lang ist, dann vielleicht besser so:
subst K: "D:\Dein\langer\Pfad\zu\den\Unterordnern"
FOR /D %%i in (k:\*.*) do rd /s /q "%%i" 2>NUL
Sollte das noch immer nicht klappen, musst Du eben den Pfad in Zeile 1 noch tiefer ansetzen.
Grüße
bastla
Ich hätte da noch 2 Ideen für einen ganz anderen Ansatz. Ist aber nur so ein Tip ins blaue hinein. Aber so hat das bei mir schonmal innem ähnlcihen Fall funktioniert:
Lösche einfach ganz normal den ordner, verwende dazu allerdings die Kurzen Verzeichnisnamen.
Die andere idee wäre einfach nur den obersten Ordner (also der indem die unterordner liegen). Also:
Lösche einfach ganz normal den ordner, verwende dazu allerdings die Kurzen Verzeichnisnamen.
Die andere idee wäre einfach nur den obersten Ordner (also der indem die unterordner liegen). Also:
rd /s C:\Ab_Hier_viele_Unterordner
Hallo Larz!
Gehe alle Ordner ("directories") in "K:\" (Name egal) durch und speichere den Ordnerpfad in "%%i"
Lösche den durch "%%i" angegebenen Ordner samt Unterordnern ("subdirectories"), und das ohne lästige Fragen ("quiet")
Schicke ev auftretende Fehlermeldungen (Fehlerkanal = 2) nach "Nirgendwo" ("NUL") und verhindere damit eine Bildschirmanzeige selbiger - wäre hier (bei einer einmaligen Aktion) eigentlich nicht nötig gewesen (sieht aber, vor allem bei regelmäßig verwendeten - und schon gut getesteten - Batches, eleganter aus
)
Grüße
bastla
Könntest Du mir kurz erläutern, was die zweite Zeile so macht?
Grundsätzlich findest Du zu allen verwendeten Befehlen Hilfestellung durch Eingabe von "Befehl /?", also etwa "for /?" in der Kommandozeile ...FOR /D %%i in (k:\*.*) do
rd /s /q "%%i"
2>NUL
Grüße
bastla

Hallo,
ich habe (oder besser ich hatte) hier 5000 RAR-Archive.
(log0001.rar , log0002.rar , ...)
Beim Entpacken wurde für jede RAR-Datei ein Verz. erstellt. Soweit ok.
Nun war der Inhalt selbst in einem Verzeichnis mit gepackt.
NACH dem entpacken und Löschen der RAR-Dateien hab ich jedoch leider pro Verzeichnis ein Verzeichnistiefe zu viel:
Ursprung:
log0001.rar
entpackt:
log0001/log0001/dat001.log
log0001/log0001/dat002.log
log0001/log0001/dat003.log
usw.
So sollte es ausschauen:
log0001/dat001.log
log0001/dat002.log
log0001/dat003.log
usw.
Wie bekomme ich in jedem der 5000 Verzeichnisse jeweils eines Verzeichnis gelöscht?
Kann ich die Lösung von bastla 1:1 übernehme?
Gruß ... tc
ich habe (oder besser ich hatte) hier 5000 RAR-Archive.
(log0001.rar , log0002.rar , ...)
Beim Entpacken wurde für jede RAR-Datei ein Verz. erstellt. Soweit ok.
Nun war der Inhalt selbst in einem Verzeichnis mit gepackt.
NACH dem entpacken und Löschen der RAR-Dateien hab ich jedoch leider pro Verzeichnis ein Verzeichnistiefe zu viel:
Ursprung:
log0001.rar
entpackt:
log0001/log0001/dat001.log
log0001/log0001/dat002.log
log0001/log0001/dat003.log
usw.
So sollte es ausschauen:
log0001/dat001.log
log0001/dat002.log
log0001/dat003.log
usw.
Wie bekomme ich in jedem der 5000 Verzeichnisse jeweils eines Verzeichnis gelöscht?
Kann ich die Lösung von bastla 1:1 übernehme?
subst K: "D:\Dein\langer\Pfad\zu\den\Unterordnern"
FOR /D %%i in (k:\*.*) do rd /s /q "%%i" 2>NUL
Gruß ... tc
Hallo truecolor!
Ist eigentlich eine andere Fragestellung ...
Ausgehend von einem "Überordner" (im Beispiel "D:\Entpackt", daher gäbe es also "D:\Entpackt\og0001\log0001\dat001.log" usw) könnte das so gehen:
Die "
Grüße
bastla
[Edit] Auf "
Ist eigentlich eine andere Fragestellung ...
Ausgehend von einem "Überordner" (im Beispiel "D:\Entpackt", daher gäbe es also "D:\Entpackt\og0001\log0001\dat001.log" usw) könnte das so gehen:
@echo off & setlocal
pushd "D:\Entpackt"
for /f "delims=" %%i in ('dir /b /ad') do if exist "%%i\%%i\" (
echo move "%%i\%%i\*.*" "%%i"
echo rd "%%i\%%i"
)
popd
pause
echo
"-Befehle vor "move
" und "rd
" sollen ein gefahrloses Testen ermöglichen - solange die da stehen, werden die Verschiebe- und Löschbefehle nur angezeigt, aber nicht ausgeführt ...Grüße
bastla
[Edit] Auf "
for /f
" umgestellt [/Edit]