Batch - Beim Befehl rmdir wird "Das Verzeichnis ist nicht leer" angezeigt

89

Ich mache ein Batch-Skript und ein Teil des Skripts versucht, ein Verzeichnis und alle seine Unterverzeichnisse zu entfernen. Ich erhalte die Meldung, dass ein Unterverzeichnis nicht leer ist. Ich habe einen Artikel über die Indizierung als Schuldigen gelesen. Ich habe WSearch deaktiviert, aber irgendwann wurde der Fehler erneut angezeigt.

rmdir /S /Q "C:\<dir>\"
Chaos
quelle
Kann ich nach Informationen über den Dateityp fragen, über den Windows Sie benachrichtigt? Bei mir tritt dies bei PDF-Dateien nur kurz nach dem Verschieben / Kopieren auf.
Jake Stevens-Haas

Antworten:

84

Ich habe die gleichen Probleme erlebt, die Harry Johnston erwähnt hat. rmdir /s /qIch würde /smich beschweren, dass ein Verzeichnis nicht leer war, obwohl es das Leeren für Sie übernehmen soll! Ich denke, es ist ein Fehler in Windows, persönlich.

Meine Problemumgehung besteht darin, delalles im Verzeichnis zu löschen, bevor ich das Verzeichnis selbst lösche:

del /f /s /q mydir 1>nul
rmdir /s /q mydir

(Das 1>nulverbirgt die Standardausgabe von, delda sonst jede einzelne gelöschte Datei aufgelistet wird.)

BoffinBrain
quelle
Ich bin auf ein Szenario gestoßen, in dem einige Unterverzeichnisse mydirdenselben Fehler "nicht leer" verursachten. Also musste ich cdin mydirund führen die delauf die Dateien in den einzelnen als auch diesen Verzeichnissen. Letztendlich hat es funktioniert, aber wenn ich den Vorgang ein drittes Mal auf einer anderen Unterebene hätte wiederholen müssen, hätte ich mich ziemlich besiegt gefühlt.
Gfullam
@gfullam Soweit ich mich erinnere, sollte meine Methode für jede Tiefe auch in rekursiven Unterverzeichnissen funktionieren. Das del /smacht es.
BoffinBrain
Wenn Sie den Explorer verwenden (wahrscheinlich auch mkdir => NO!), Einen Ordner hinzufügen (und den Namen ändern), beenden Sie das Entfernen nur mit dem rd /s /q mydirBefehl.
Meister DJon
1
Okay, ich denke, das Löschen der Fenster und der Wechsel zu Linux ist viel einfacher als dieser Schmerz :)
RajnishCoder
1
@RajnishCoder Das Leben mit Windows ist im Grunde eine Welt der Problemumgehungen. Dieses spezielle Problem ist nichts im Vergleich zu anderen Problemen mit Windows 10!
BoffinBrain
45

Ich bin mit diesem Problem vertraut. Die einfachste Problemumgehung besteht darin, den Vorgang unter bestimmten Bedingungen zu wiederholen. Ich habe noch nie gesehen, dass es zweimal hintereinander fehlschlägt - es sei denn, es liegt tatsächlich eine offene Datei oder ein Berechtigungsproblem vor!

rd /s /q c:\deleteme
if exist c:\deleteme rd /s /q c:\deleteme
Harry Johnston
quelle
10
Heilige Molly, das macht noch keinen Sinn, aber es hat funktioniert. Was zum #!%#@! Microsoft
Sam B
1
Sie sind ein Lebensretter
Haseeb Zulfiqar
IF EXISTHäute Access is deniedund andere Situationen. Ich habe DIR c:\deletemevor allem etwas hinzugefügt und Fehler überprüft.
it3xl
Wenn der Windows Explorer in einem Unterverzeichnis geöffnet ist oder auf andere Weise durchsucht wird, schlägt dies zweimal hintereinander fehl. Stellen Sie also sicher, dass Sie es ein drittes Mal fragen (was tatsächlich funktioniert hat)
Jake Stevens-Haas
Tatsächlich ist es für mich zweimal hintereinander aufgetreten, ohne dass etwas offen war oder ein Berechtigungsproblem aufgetreten ist. Mein Rekord ist sieben Mal. Empfehlen Sie den Ansatz von @ BoffinbraiN.
Jake Stevens-Haas
21

Geben Sie die Eingabeaufforderung als Admin ein und führen Sie sie aus

rmdir /s <FOLDER>
Adilson Cabral
quelle
1
Dies unterscheidet sich nicht von dem, was das OP tat.
Harry Johnston
20

Ich bin gerade auf das gleiche Problem gestoßen und es hatte damit zu tun, dass einige Dateien verloren gingen oder beschädigt wurden. Um das Problem zu beheben, führen Sie einfach check disk aus:

chkdsk /F e:

Dies kann über das Suchfenster oder über eine cmd-Eingabeaufforderung ausgeführt werden. Das /Fbehebt alle Probleme, die es findet, wie das Wiederherstellen der Dateien. Sobald dies abgeschlossen ist, können Sie die Dateien und Ordner wie gewohnt löschen.

jrose
quelle
Perfekt, ich habe es seit einer halben Stunde versucht
Trex
Dadurch wurden einige versteckte Dateien in meinem Ordner gefunden, die ich dann löschen konnte. Wirklich böse 😑
Beat
5

Ich hatte ein ähnliches Problem und versuchte, einen leeren Ordner über den Windows Explorer zu löschen. Hat mir den nicht leeren Fehler gezeigt, also dachte ich, ich versuche es über admin cmd, aber keine der Antworten hier hat geholfen.

Nachdem ich eine Datei in den leeren Ordner verschoben habe. Ich konnte den nicht leeren Ordner löschen

Grisu118
quelle
1
Bitte schreibe es in einen Kommentar.
Virb
Interessant. Wahrscheinlich nicht relevant für das OP-Szenario.
Harry Johnston
3

Wie @gfullam in einem Kommentar zur Antwort von @ BoffinbraiN feststellte, ist das, das <dir>Sie selbst löschen, möglicherweise nicht dasjenige, das Dateien enthält: Möglicherweise befinden sich Unterverzeichnisse, in <dir>denen die Meldung "Das Verzeichnis ist nicht leer" angezeigt wird, und die einzige Lösung wäre dann rekursiv durch die Verzeichnisse iterieren und alle enthaltenen Dateien manuell löschen ... Am Ende entschied ich mich, einen Port rmvon UNIX zu verwenden. rm.exekommt mit Git Bash, MinGW, Cygwin, GnuWin32 und anderen. Sie müssen nur das übergeordnete Verzeichnis in Ihrem PATH haben und dann wie in einem UNIX-System ausführen.

Beispiel für ein Stapelskript:

set PATH=C:\cygwin64\bin;%PATH%
rm -rf "C:\<dir>"
Gobe
quelle
2

Was für mich funktioniert hat, ist das Folgende. Es sieht so aus, als würde der RMDir-Befehl fast immer "Das Verzeichnis ist nicht leer" ausgeben ...

:Cleanup_Temporary_Files_and_Folders

Erase /F /S /Q C:\MyDir

RMDir /S /Q C:\MyDir
If  Exist  C:\MyDir  GoTo Cleanup_Temporary_Files_and_Folders
user7432246
quelle
1

In meinem Fall habe ich den Ordner einfach so in das Stammverzeichnis verschoben.

move <source directory> c:\

Führen Sie dann den Befehl aus, um das Verzeichnis zu entfernen

rmdir c:\<moved directory> /s /q
Daniel Barde
quelle
2
rmdir c:\<moved directory> /s /qist die richtige Antwort
Lalengua
1
Es ist NICHT die richtige Antwort. Das Löschen eines Ordners im Stammverzeichnis kann dieselben Meldungen verursachen: Der Ordner ist nicht leer.
Gangnus
Ich weiß, dass dies ein alter Thread ist. Ich wollte nur sagen, dass dies für mich funktioniert hat ...
Manuel Rivera
1

Ich hatte "C: \ Benutzer \ Benutzername \ OneDrive \ Fonts", das mit "C: \ Windows \ Fonts" verknüpft war (/ D), und ich hatte das gleiche Problem. In meinem Fall

cd "C: \ Benutzer \ Benutzername \ OneDrive"

rd / s Schriftarten

Y (um die Aktion zu bestätigen)

half mir. Ich hoffe, dass es Ihnen auch hilft; D.

Maciej Błędkowski
quelle
1
Fügen Sie / q hinzu, um zu vermeiden, dass beim Ausführen eines Stapels eine Bestätigung erforderlich ist.
Jonathan Rosenne
0

Ähnlich wie bei Harry Johnstons Antwort mache ich eine Schleife, bis es funktioniert.

set dirPath=C:\temp\mytest
:removedir
if exist "%dirPath%" (
    rd /s /q "%dirPath%" 
    goto removedir
)
BuvinJ
quelle
0
rmdir <directory> /s

das hat bei mir funktioniert.

Arvind Kushwaha
quelle
0

Der Grund, warum rd /sbestimmte Dateien nicht gelöscht werden, liegt höchstwahrscheinlich an READONLY-Dateiattributen für Dateien im Verzeichnis.

Um dies zu beheben, müssen Sie zunächst sicherstellen, dass Sie die Attribute aller Dateien zurücksetzen:

attrib -r %directory% /s /d
rd /s %directory%

Es können auch andere Dateien wie versteckte Dateien oder Systemdateien vorhanden sein. Wenn Sie also auf Nummer sicher gehen möchten:

attrib -h -r -s %directory% /s /d
rd /s %directory%
Peter Hoeg
quelle
rd /signoriert schreibgeschützte Flags.
Harry Johnston
0

Windows ist manchmal "von Natur aus kaputt", daher müssen Sie einen leeren Ordner erstellen und dann den "kaputten Ordner" mit einem "leeren Ordner" im Sicherungsmodus spiegeln.

robocopy - cmd copy utility

/copyall - copies everything
/mir deletes item if there is no such item in source a.k.a mirrors source with
destination
/b works around premissions shenanigans

Erstellen Sie ein leeres Verzeichnis wie folgt:

mkdir empty

Überschreiben Sie einen defekten Ordner mit einem leeren Ordner wie folgt:

robocopy /copyall /mir /b empty broken

und löschen Sie dann diesen Ordner

rd broken /s
rd empty /s

Wenn dies nicht hilft, versuchen Sie, im "Wiederherstellungsmodus mit Eingabeaufforderung" neu zu starten, indem Sie beim Klicken auf "Neustart" die Umschalttaste gedrückt halten und versuchen, diesen Befehl im Wiederherstellungsmodus erneut auszuführen

Kristijonas Grigorovičius
quelle
Ja, ich denke, Robocopy würde im OP-Szenario funktionieren, da fehlgeschlagene Vorgänge automatisch wiederholt werden. Sie möchten wahrscheinlich angeben /W:0, um unnötige Verzögerungen zu vermeiden. Möglicherweise möchten Sie dies nicht, /bda hierfür Administratorrechte erforderlich sind. Der Wiederherstellungsmodus ist für diese Frage nicht relevant, da es sich um ein Batch-Skript handelt und nicht um jemanden, der manuell versucht, ein Verzeichnis zu entfernen.
Harry Johnston
0

Stellen Sie zunächst sicher, dass Sie als Administrator angemeldet sind. Zum Zeitpunkt des Schreibens (29. Juni 2020) habe ich auf die neueste Version von Windows 10 aktualisiert. Funktioniert rmdir /S /Q C:\<dir>\für mich, daher gehe ich davon aus, dass es auch für Sie funktionieren würde, wenn Sie Ihren Computer aktualisieren würden.

Patrick
quelle
Der Fehler tritt nur sporadisch auf. Es funktioniert vielleicht 99 mal hundert.
Harry Johnston
-1

Ich kann mir folgende mögliche Ursachen vorstellen:

  1. Es gibt Dateien oder Unterverzeichnisse, die höhere Berechtigungen benötigen
  2. Es werden Dateien verwendet, nicht nur von WSearch, sondern möglicherweise auch von Ihrem Virenscanner oder etwas anderem

Für 1.) können Sie versuchen runas /user:Administrator, höhere Berechtigungen zu erhalten oder die Batchdatei als Administrator über das Kontextmenü zu starten. Wenn das nicht hilft, hat vielleicht sogar der Administrator nicht die Rechte. Dann müssen Sie den Besitz des Verzeichnisses übernehmen.

Um 2.) Process Explorer herunterzuladen , klicken Find/Find handle or DLL...oder drücken Sie Ctrl+F, geben Sie den Namen des Verzeichnisses ein und finden Sie heraus, wer es verwendet. Schließen Sie nach Möglichkeit die Anwendung, die das Verzeichnis verwendet.

Thomas Weller
quelle
Auf den Computern ist das Administratorkonto deaktiviert. Ich bin in der Administratorgruppe, aber mir ist kein Administratorkennwort bekannt. Irgendwelche anderen Vorschläge, um das Berechtigungsproblem zu umgehen? Jemand erwähnte das Aufrufen eines anderen Programms aus dem Stapel (wie vba).
Mayhem
@Mayhem: Das Umgehen von Berechtigungen ist ziemlich schwierig ... Wir würden wahrscheinlich einen Exploit für einen Fehler in Windows benötigen, um dies ohne Kennwort zu tun.
Thomas Weller
-2

Dies liegt daran, dass Sie sich im Verzeichnis befinden. Stellen Sie sicher, dass sich Ihre CLI und Ihr Explorer nicht im Verzeichnis befinden. Schließen Sie alle, um sicherzugehen. Führen Sie dann als Administrator und cdin das übergeordnete Verzeichnis aus und führen Sie Folgendes aus:

rmdir /s /q mydir
Jimmy
quelle
In diesem Szenario wird die Meldung "Der Prozess kann nicht auf die Datei zugreifen ..." und nicht die Meldung "Das Verzeichnis ist nicht leer" generiert. Botschaft.
Harry Johnston