it-swarm.com.de

Wie lösche ich Verzeichnisbäume über eine Batch-Datei unter Windows 7?

Ich möchte den gesamten Inhalt eines bestimmten Ordners unter Windows 7 über eine Batch-Datei löschen. Mein Problem ist, dass 'del' oder 'erase' nur die Dateien löscht, nicht die Ordner und 'rmdir' oder 'rd' immer den angegebenen Ordner mit seinem Inhalt löscht, aber ich möchte nur den Inhalt löschen, nicht den Ordner selbst . Ich habe den Befehl 'rmdir /S /Q "C:\Share\*"' ausprobiert, der mir einen Syntaxfehler bescherte.

Was ist der richtige Weg, um dies zu tun?

Ich arbeite unter Windows 7 Professional 64-Bit und habe Administratorrechte.

34
Michael K

Ihre Batch-Datei muss zwei Befehle ausführen, einen zum Löschen der Dateien und einen zum Entfernen der untergeordneten Verzeichnisse. Ich gehe davon aus, dass das zu entfernende Verzeichnis C:\Share\ ist.

Die Batch-Datei sollte ungefähr so ​​aussehen:

del /s /f /q c:\share\*.*
for /f %%f in ('dir /ad /b c:\share\') do rd /s /q c:\share\%%f

del /s /f /q durchsucht den Verzeichnisbaum rekursiv und löscht alle Dateien (auch schreibgeschützte Dateien), ohne zur Bestätigung aufzufordern.

Die zweite Zeile durchläuft alle Unterverzeichnisse (die jetzt leer sein sollten) und entfernt sie.

Dies sollte die einfachste Möglichkeit sein, den gesamten Ordner zu löschen und neu zu erstellen (was Sie meiner Meinung nach aufgrund von Berechtigungen nicht tun möchten?).

34
Windos
rmdir /s/q C:\Share

Sie erhalten einen "Syntaxfehler", weil rmdir nur vollständige Namen akzeptiert, keine Platzhalter. (In cmd.exe wird die Platzhaltererweiterung den einzelnen Programmen überlassen, nicht allen.)

Wenn Sie viele Verzeichnisse haben, die mit Share... beginnen, verwenden Sie eine for Schleife.

for /d %f in (C:\Share*) do rmdir /s/q "%f"
27
grawity

Versuchen Sie dies in einer Eingabeaufforderung:

rd /s/q "C:\Share"
12
Chau Chee Yang
for /f "delims=" %%f in ('dir /ad /b c:\share\') do rd /s /q c:\share\%%f

Dies funktioniert nicht, wenn die Unterverzeichnisse andere Verzeichnisse enthalten, die Leerzeichen enthalten.

Damit dies funktioniert, musste ich die letzte Zeichenfolge wie folgt zitieren

für/f "delims =" %% f in ('dir/ad/b c:\share \') mache rd/s/q "c:\share\%% f"

Anscheinend bewirkt dies, dass der Befehl an der angegebenen Zeichenfolge und nicht nur an der Zeichenfolge selbst arbeitet.

2
Jim JR Harris

Wie wäre es mit ?

rmdir /S /Q "target"
mkdir "target

BEARBEITEN: Diese Lösung ist natürlich nur dann anwendbar, wenn Sie eine vorübergehende Abwesenheit eines Ordners tolerieren können.

2

Ich würde dies in dem Ordner versuchen, in dem alle Unterordner gelöscht werden sollen, aber der Stammordner (und die Dateien im Stammordner) bleiben unverändert: für/D% v in (*) do rd/s/q% v

for/D vergleicht Verzeichnisse und rd/s/q löscht jeweils ein Verzeichnis

0
Otto Hänninen