it-swarm.com.de

Batch - Get "Das Verzeichnis ist nicht leer" für den Befehl rmdir

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

rmdir /S /Q "C:\<dir>\"
66
Mayhem

Ich habe die gleichen Probleme erlebt, wie Harry Johnston erwähnt hat. rmdir /s /q würde sich darüber beschweren, dass ein Verzeichnis nicht leer ist, obwohl /s die Entleerung für Sie übernehmen soll! Ich denke, es ist ein Fehler in Windows, persönlich.

Mein Workaround ist del alles im Verzeichnis, bevor das Verzeichnis selbst gelöscht wird:

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

(Der 1>nul verbirgt die Standardausgabe von del, da ansonsten jede einzelne Datei aufgelistet wird, die gelöscht wird.)

55
BoffinbraiN

Ich bin mit diesem Problem vertraut. Die einfachste Problemumgehung besteht darin, die Operation unter bestimmten Bedingungen zu wiederholen. Ich habe noch nie gesehen, dass es zweimal hintereinander fehlschlug - es sei denn, es gibt offensichtlich eine offene Datei oder ein Berechtigungsproblem!

rd /s /q c:\deleteme
if exist c:\deleteme rd /s /q c:\deleteme
36
Harry Johnston

Ich bin gerade auf das gleiche Problem gestoßen und hatte etwas damit zu tun, dass einige Dateien verloren 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 Eingabeaufforderung ausgeführt werden. Der /F behebt alle gefundenen Probleme, z. B. das Wiederherstellen der Dateien. Sobald dies abgeschlossen ist, können Sie die Dateien und Ordner wie gewohnt löschen.

16
jrose

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

rmdir /s <FOLDER>
9
Adilson Cabral

Ich hatte "C:\Benutzer\Benutzername\OneDrive\Fonts", das auf "C:\Windows\Fonts" (/ D) gesetzt wurde, und ich hatte das gleiche Problem. In meinem Fall

cD "C:\Benutzer\Benutzername\OneDrive"

rd/s Schriftarten

Y (to confirm the action)

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

3
Maciej Bl

Wie @gfullam in einem Kommentar zu @ BoffinbraiNs Antwort feststellte, könnte es sein, dass der <dir>, den Sie selbst löschen, nicht der ist, der Dateien enthält: In <dir> befinden sich möglicherweise Unterverzeichnisse, die die Meldung "Das Verzeichnis ist nicht leer" enthält und die einzige Lösung wäre Um rekursiv durch die Verzeichnisse zu iterieren, müssen alle ihre Dateien manuell gelöscht werden ... Ich entschied mich schließlich für einen Port mit rm von UNIX. rm.exe kommt mit Git Bash, MinGW, Cygwin, GnuWin32 und anderen. Sie müssen nur das übergeordnete Verzeichnis in PATH haben und dann wie in einem UNIX-System ausführen.

Beispiel für ein Batch-Skript:

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

Ich hatte ein ähnliches Problem, versuchte einen leeren Ordner über den Windows Explorer zu löschen. Zeigt mir den nicht leeren Fehler, also dachte ich, ich probiere es über admin cmd aus, aber keine der Antworten hier half. 

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

2
Grisu118

Was für mich funktioniert hat, ist folgendes. Ich scheine, 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
1
user7432246

Im 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
0
Daniel Barde

Ich kann mir folgende mögliche Ursachen vorstellen:

  1. es gibt Dateien oder Unterverzeichnisse, die höhere Berechtigungen benötigen
  2. es werden Dateien nicht nur von WSearch, sondern möglicherweise auch von Ihrem Virenscanner oder einem anderen Programm verwendet

Zu 1.) können Sie runas /user:Administrator ausprobieren, um höhere Berechtigungen zu erhalten, oder die Batch-Datei als Administrator über das Kontextmenü starten. Wenn das nicht hilft, hat möglicherweise auch der Administrator keine Rechte. Dann müssen Sie den Besitz des Verzeichnisses übernehmen.

Für 2.) Download Process Explorer , klicken Sie auf Find/Find handle or DLL... oder drücken Sie Ctrl+FGeben 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.

0
Thomas Weller

Ähnlich wie bei Harry Johnston antworte ich, bis es funktioniert. 

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