2013-01-17 15:33:22 +0000 2013-01-17 15:33:22 +0000
59
59

Vollständiges Löschen eines Ordners in Windows über die Befehlszeile

Ich muss einen Ordner mit anderen Ordnern und Dateien darin löschen. Ich habe die Befehle del und rmdir versucht, aber manchmal scheitern sie mit einigen Fehlerzeilen: [PATH]: The directory isn't empty.

Gibt es eine gute Alternative?

Antworten (8)

58
58
58
2013-01-17 15:38:19 +0000

Versuchen Sie:

rmdir /S your_directory

oder:

rmdir /S /Q your_directory

, um Bestätigungsmeldungen zu überspringen.

16
16
16
2013-07-16 16:23:26 +0000

Das passiert mir sehr oft mit meinen automatisierten Build-Skripten.

Ich vermute, der Grund dafür könnte eine Anwendung sein, die in diesem Verzeichnis eine Datei mit “Freigabe löschen” geöffnet hat. D.h. die Anwendung erlaubt zwar das Löschen der Datei (weshalb ich glaube, dass der DeleteFile-Aufruf nicht fehlschlägt), aber die Datei verschwindet erst, nachdem die besagte Anwendung ihr Handle geschlossen hat.

Das bedeutet, dass die Datei möglicherweise noch vorhanden ist, wenn der Befehl rmdir versucht, den Ordner zu löschen, daher die Fehlermeldung. Bald darauf schließt das besagte Programm sein Handle, die Datei verschwindet, und wenn Sie den Ordner inspizieren, um zu sehen, von welcher Datei rmdir gesprochen hat, ist er leer.

Zumindest ist das meine Theorie.

Die von Harry Johnston vorgeschlagene Abhilfe sieht gut aus. Nur würde ich zwischen den Befehlen rmdir eine Pause einfügen. Natürlich hat Windows keinen leicht skriptfähigen “Pause”-Befehl (Korrektur: alte Windows-Versionen haben keinen, neuere haben einen - siehe Kommentare). Aber wenn die Granularität von Sekunden ausreicht, kann man ping verwenden, um eine Pause zu erzeugen:

ping -n {desired_delay_in_seconds + 1} 127.0.0.1 >nul

Also insgesamt:

rd /s /q foo
:: retry once
if exist foo (
    :: clear errorlevel
    cmd /c
    :: pause
    ping -n 2 127.0.0.1 >nul
    :: retry
    rd /s /q foo
)
:: retry yet again
if exist foo (
    cmd /c
    ping -n 2 127.0.0.1 >nul
    rd /s /q foo
)
:: give up
if exist foo {panic}
11
11
11
2013-01-17 16:27:07 +0000

Sie könnten einige schreibgeschützte Dateien haben, Sie können die Option del /F verwenden, um sie mit

del /S /F your_directory
     rmdir your_directory

loszuwerden. Sie könnten auch einige versteckte Dateien haben, und wenn Sie wirklich sicher sind, dass Sie sie löschen wollen, dann können Sie dies mit

del /S /F /AH your_directory
     rmdir your_directory

tun. Wenn dies immer noch fehlschlägt, dann haben Sie entweder keine Erlaubnis, einige Dateien zu löschen, oder einige der Dateien werden immer noch verwendet.

5
5
5
2013-01-17 22:34:36 +0000

Ich glaube, es gibt einen Fehler in Windows 7 (und vielleicht anderen Versionen), der dieses Symptom manchmal verursacht; oder es könnte ein Fehler in Software von Drittanbietern sein. (Haben Sie zufällig Symantec Endpoint Protection installiert?)

Wie auch immer, ich bin ziemlich oft darauf gestoßen. In den meisten Fällen lässt sich das Problem umgehen, indem Sie rd /s /q zwei- oder dreimal hintereinander ausführen.

Wenn es sich um eine Batch-Datei handelt, können Sie so etwas tun:

rd /s /q foo
if exist foo rd /s /q foo
if exist foo rd /s /q foo
if exist foo echo Help! & pause
3
3
3
2013-01-17 15:36:33 +0000

Verwenden Sie del für die darin enthaltenen Dateien, dann rmdir, um den Ordner zu entfernen.

Um mit der Methode rmdir auch alle Dateien zu entfernen, verwenden Sie den Schalter /S vor dem Verzeichnisnamen und /Q, um die Aufforderung zum Löschen zu unterdrücken. Dies ist die beste Methode, da Ihnen keinerlei Dateien entgehen. Seien Sie jedoch vorsichtig, wenn Sie den Schalter /Q verwenden, da er Sie nicht vor System- oder versteckten Dateiattributen warnt.

2
2
2
2017-12-01 18:08:45 +0000

Wenn Sie node verwenden, können Sie die rimraf -Abhängigkeit wie folgt verwenden:

run install: npm install rimraf -g

delete folder: rimraf SourceFolder

Dies hat mir geholfen, als ich die Fehlermeldung:

the source file names are larger than is supported by the file system bekam

0
0
0
2015-11-16 14:47:29 +0000

Ich denke, Sie können es so verwenden:

msg*your file is going to delete 
pause
del/s /q "C:\Users\Rd\Desktop\New folder (2)\" 
rmdir /s /q "C:\Users\Rd\Desktop\New folder (2)\"
mkdir "C:\Users\Rd\Desktop\New folder (2)"
0
0
0
2016-06-24 18:30:12 +0000

Ordner ältere Versionen von Windows (DOS, Windows 95/98/ME), DELTREE ist das Äquivalent zu RM oder RMDIR. Ich verwende DELTREE auf meiner Windows 7-Arbeitsstation in Batch-Dateien, aber

Deletes a directory and all the subdirectories and files in it.

To delete one or more files and directories:
DELTREE [/Y] [drive:]path [[drive:]path[...]]

  /Y Suppresses prompting to confirm you want to delete
                  the subdirectory.
  [drive:]path Specifies the name of the directory you want to delete.

Note: Use DELTREE cautiously. Every file and subdirectory within the
specified directory will be deleted.