Bestimmte Unterverzeichnisse ermitteln, dann deren Inhalt und die Verzeichnisse selbst löschen
Die Aufgabe die es für mich zu lösen gilt ist die folgende:
1. In einem Ordner sind beliebig viele Unterordner in maximal 3 Ebenen
Ursprungsordner
-Ordner 1 Ebene 1
--Unterordner 1 Ebene 2
---Unterordner 1 Ebene 3
-Ordner 2 Ebene 1
--Unterordner 2 Ebene 2
---Unterordner 2 Ebene 3
-Ordner n Ebene 1
--Unterordner n Ebene 2
---Unterordner n Ebene 3
2. Es gilt doppelte Inhalte gewisser Unterordner auszumachen und samt Ordner zu löschen
3. Der Stammordner der Inhalte der im selben Ursprungsordner liegen kann darf nicht gelöscht werden
Genauer gesagt geht es um Scriptbibliotheken die in Unterordnern unnötig sind, aber in einer Instanz gebraucht werden.
Ich bin ein absoluter Windows-Batchanfänger und komme mit der Syntax beim besten Willen nicht zurecht.
Aber ich habe schon einmal wie folgt angefangen:
Ich habe dann in der Datei del.txt auf jeden Fall genau schon die Ordner die es samt Inhalt zu löschen gilt.
Die Zweistufigkeit der Ordnersuche mache ich deshalb, da die Bibliothek die erhalten werden soll mit der direkten Suche nach ace* auch gefunden und gelöscht würde. Da sie aber nicht in einem Unterordner mit libs liegt, schließe ich sie so aus.
Leider gelingt es mir nicht in einer weiteren FOR-Schleife die betroffenen Ordner in del.txt per del und anschließend rd zu löschen.
Die Suchfunktion dieser Seite führt sicher zu einigen Tipps ähnlicher Probleme, da ich die Syntax aber nicht sicher verstehe, bin ich nicht weitergekommen.
1. In einem Ordner sind beliebig viele Unterordner in maximal 3 Ebenen
Ursprungsordner
-Ordner 1 Ebene 1
--Unterordner 1 Ebene 2
---Unterordner 1 Ebene 3
-Ordner 2 Ebene 1
--Unterordner 2 Ebene 2
---Unterordner 2 Ebene 3
-Ordner n Ebene 1
--Unterordner n Ebene 2
---Unterordner n Ebene 3
2. Es gilt doppelte Inhalte gewisser Unterordner auszumachen und samt Ordner zu löschen
3. Der Stammordner der Inhalte der im selben Ursprungsordner liegen kann darf nicht gelöscht werden
Genauer gesagt geht es um Scriptbibliotheken die in Unterordnern unnötig sind, aber in einer Instanz gebraucht werden.
Ich bin ein absoluter Windows-Batchanfänger und komme mit der Syntax beim besten Willen nicht zurecht.
Aber ich habe schon einmal wie folgt angefangen:
dir /s /b libs > dat.txtFOR %%i IN (dat.txt) DO dir /s /b ace* > del.txt
Ich habe dann in der Datei del.txt auf jeden Fall genau schon die Ordner die es samt Inhalt zu löschen gilt.
Die Zweistufigkeit der Ordnersuche mache ich deshalb, da die Bibliothek die erhalten werden soll mit der direkten Suche nach ace* auch gefunden und gelöscht würde. Da sie aber nicht in einem Unterordner mit libs liegt, schließe ich sie so aus.
Leider gelingt es mir nicht in einer weiteren FOR-Schleife die betroffenen Ordner in del.txt per del und anschließend rd zu löschen.
Die Suchfunktion dieser Seite führt sicher zu einigen Tipps ähnlicher Probleme, da ich die Syntax aber nicht sicher verstehe, bin ich nicht weitergekommen.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 54660
Url: https://administrator.de/forum/bestimmte-unterverzeichnisse-ermitteln-dann-deren-inhalt-und-die-verzeichnisse-selbst-loeschen-54660.html
Ausgedruckt am: 08.05.2025 um 16:05 Uhr
9 Kommentare
Neuester Kommentar
Moin demonllama,
willkommen im Forum.
Vorab: finde ich super, dass Du als Batch-Anfänger es dennoch erst selbst versucht hast und nicht einfach so eine pauschale "Ich mussn skript haben, wo drinne dann alles gelöscht wird oder so"-Frage gestellt hast.
Auch die Detailbeschreibung ist allerbest. Vorbildlich. Darfst gerne öfter was fragen hier.
Dennoch auch zu diesen Beschreibungen zwei kleine Rückfragen.
a) Du begründest dieses zweistufige Vorgehen damit, dass Dir sonst eine ace*-Datei im (relativen) Root-Ordner liegt, mitgelöscht werden würde.
Hat diese keinen "festen" Namen? Dann könnte man/frau sie mit "findstr /v dieserAceName" ausschliessen.
b) Reden wir jetzt von ace*-Unterverzeichnissen, die komplett gelöscht werden sollen?
Oder von ace*-Dateien, die als einzige Dateien-Wildcards in Irgendwie-benannten-Unterordnern liegen? Oder gibt es auch Unterordner, die Dateien ungleich "ace*" enthalten und die erhalten bleiben sollen?
Wenn ALLE Unterordner samt Inhalt gelöscht werden sollen, dann liesse sich Deine ohnehin schon recht handliche Anweisung weiter eindampfen:
Und die Variante, alle Unterverzeichnisse unterhalb "libs", die "ace*"-Dateien enthalten sollen komplett gelöscht werden:
Gruss
Biber
willkommen im Forum.
Vorab: finde ich super, dass Du als Batch-Anfänger es dennoch erst selbst versucht hast und nicht einfach so eine pauschale "Ich mussn skript haben, wo drinne dann alles gelöscht wird oder so"-Frage gestellt hast.
Auch die Detailbeschreibung ist allerbest. Vorbildlich. Darfst gerne öfter was fragen hier.
Dennoch auch zu diesen Beschreibungen zwei kleine Rückfragen.
a) Du begründest dieses zweistufige Vorgehen damit, dass Dir sonst eine ace*-Datei im (relativen) Root-Ordner liegt, mitgelöscht werden würde.
Hat diese keinen "festen" Namen? Dann könnte man/frau sie mit "findstr /v dieserAceName" ausschliessen.
b) Reden wir jetzt von ace*-Unterverzeichnissen, die komplett gelöscht werden sollen?
Oder von ace*-Dateien, die als einzige Dateien-Wildcards in Irgendwie-benannten-Unterordnern liegen? Oder gibt es auch Unterordner, die Dateien ungleich "ace*" enthalten und die erhalten bleiben sollen?
Wenn ALLE Unterordner samt Inhalt gelöscht werden sollen, dann liesse sich Deine ohnehin schon recht handliche Anweisung weiter eindampfen:
for /d %i in (x:\libs\*) do @echo Rd /s /q %i
[Test vom CMD-Prompt aus; das Echo zum Scharfmachen weg]Und die Variante, alle Unterverzeichnisse unterhalb "libs", die "ace*"-Dateien enthalten sollen komplett gelöscht werden:
for /d %i in (x:\libs\*) do @if exist "%i\ace*" echo Rd /s /q %i
Gruss
Biber
So, demonllama,
diese marode Formatierung in Deinem letzten Post habe ich geflickt..
Abgesehen davon: der Oneliner für Deine Anforderung sollte dann dieser sein:
[Demo am CMD-Prompt, bitte so Copy&Paste'n zum Test
Falls Das so passt---> in eine Batchdatei kopierien und alle einfachen durch doppelte Prozentzeichen ersetzen.
Aber poste erstmal bitte die Ausgabe dieser Anweisung auf Deinem Rechner.
Gruss
Biber
diese marode Formatierung in Deinem letzten Post habe ich geflickt..
Abgesehen davon: der Oneliner für Deine Anforderung sollte dann dieser sein:
[Demo am CMD-Prompt, bitte so Copy&Paste'n zum Test
>for /D %i in (c:\temp\*) do @for /d %j in ("%i\*") do @if "%~nxj" GEQ "ace" if "%~nxj" LSS "aceZ" @echo rd /s /Q "%~j"
Falls Das so passt---> in eine Batchdatei kopierien und alle einfachen durch doppelte Prozentzeichen ersetzen.
Aber poste erstmal bitte die Ausgabe dieser Anweisung auf Deinem Rechner.
Gruss
Biber
Na, diese Feinheiten sind jetzt kein Problem mehr, wenn das Gerüst steht.
Packen wir es in einen Batch:
[Ungetestete Skizze. Das fette ECHO ist nur zum Testen wie immer .]
Wenn dieser Batch OHNE Parameter aufgerufen wird, führt er seine Aktionen in c:\temp aus.
Bei Aufruf als DeleteAllAces "Y:\Eigene Dateien\MyAces" führt er den Krams in "Y:\Eigene Dateien\MyAces" aus.
Kann ich den Thread schliessen?
Gruss
Biber
Packen wir es in einen Batch:
::-- snipp DeleteAllAces.bat
@if [%1]== %0 c:\temp
@for /D %i in ("%~1\*") do (
@if "%%~nxi" NEQ "ace" cmd /c @for /f "delims=" %%j in ('dir /s /b /a:d "%%i\ace*"') do (
@<b>ECHO</b> rd /s /Q "%%~j"
))
::---- snipp DeleteAllAces.bat
Wenn dieser Batch OHNE Parameter aufgerufen wird, führt er seine Aktionen in c:\temp aus.
Bei Aufruf als DeleteAllAces "Y:\Eigene Dateien\MyAces" führt er den Krams in "Y:\Eigene Dateien\MyAces" aus.
Kann ich den Thread schliessen?
Gruss
Biber