Ich muss einen Ordner löschen, der andere Ordner und Dateien enthält. Ich habe versucht del
und rmdir
Befehle, aber manchmal scheitern sie mit einigen Fehlerzeilen:[PATH]: The directory isn't empty.
Gibt es eine gute Alternative?
Ich muss einen Ordner löschen, der andere Ordner und Dateien enthält. Ich habe versucht del
und rmdir
Befehle, aber manchmal scheitern sie mit einigen Fehlerzeilen:[PATH]: The directory isn't empty.
Gibt es eine gute Alternative?
Antworten:
Das passiert mir oft mit meinen automatisierten Build-Skripten.
Ich denke, der Grund könnte eine Anwendung sein, in der eine Datei mit "share delete" in diesem Verzeichnis geöffnet ist. Dh die Anwendung erlaubt das Löschen der Datei (weshalb der DeleteFile-Aufruf meines Erachtens nicht fehlschlägt), aber die Datei verschwindet erst, nachdem die Anwendung ihr Handle geschlossen hat.
Das bedeutet, dass die Datei möglicherweise noch vorhanden ist, wenn der rmdir
Befehl versucht, den Ordner zu löschen, daher die Fehlermeldung. Kurz danach schließt die Anwendung das Handle, die Datei verschwindet und wenn Sie den Ordner überprüfen, um festzustellen, von welcher Datei rmdir
die Rede war, ist sie leer.
Zumindest ist das meine Theorie.
Die von Harry Johnston vorgeschlagene Problemumgehung sieht gut aus. Nur ich würde eine Pause zwischen den rmdir
Befehlen einfügen . Natürlich hat Windows keinen leicht skriptfähigen "Pause" -Befehl (Korrektur: Alte Windows-Versionen haben das nicht, neuere - siehe Kommentare). Wenn jedoch die Granularität von Sekunden ausreicht, kann ping
eine Pause erstellt werden:
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}
rm -rf /directory/
sollte auf allen Betriebssystemen global sein.
timeout /t 3
pause
Befehl nicht).
Versuchen:
rmdir /S your_directory
oder:
rmdir /S /Q your_directory
um Bestätigungsnachrichten zu überspringen.
del
und rmdir
nichts fragte, sendeten sie nur einige Zeilen wie die in der Beschreibung.
rmdir /s
löscht alles, was gelöscht werden kann. Möglicherweise verfügen Sie über Dateien, die von einem Programm gesperrt wurden, schreibgeschützte Dateien oder Dateien, für deren Löschen Sie Administratorrechte benötigen. Es gibt keinen einzigen Befehl, der all diese Situationen für Sie
Möglicherweise verfügen Sie über schreibgeschützte Dateien. Sie können die Option del / F verwenden, um sie mithilfe von zu entfernen
del /S /F your_directory
rmdir your_directory
Sie könnten auch versteckte Dateien haben und wenn Sie wirklich sicher sind, dass Sie diese löschen möchten, können Sie dies mit tun
del /S /F /AH your_directory
rmdir your_directory
Wenn dies weiterhin fehlschlägt, haben Sie entweder keine Berechtigung zum Löschen einiger Dateien, oder einige der Dateien werden noch verwendet.
Ich glaube, es gibt einen Fehler in Windows 7 (und möglicherweise in anderen Versionen), der manchmal dieses Symptom verursacht. oder es könnte ein Fehler in Software von Drittanbietern sein. (Haben Sie Symantec Endpoint Protection zufällig installiert?)
Jedenfalls bin ich ziemlich oft darauf gestoßen. In den meisten Fällen kann das Problem durch rd /s /q
zwei- oder dreimaliges Ausführen in Folge behoben werden.
Wenn dies in einer Batch-Datei ist, 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
Verwenden Sie del
für die Dateien im Inneren, rmdir
um den Ordner zu entfernen.
Um die rmdir
Methode auch zum Entfernen aller Dateien zu verwenden, verwenden Sie die /S
Option vor dem Verzeichnisnamen und /Q
unterdrücken Sie die Aufforderung zum Löschen. Dies ist der beste Weg, da Sie keinerlei Dateien verpassen. Seien Sie jedoch vorsichtig bei der Verwendung der Option / Q, da Sie sonst nicht vor System- oder versteckten Dateiattributen gewarnt werden
Wenn Sie node verwenden , können Sie die rimraf- Abhängigkeit folgendermaßen verwenden:
Führen Sie install aus: npm install rimraf -g
lösche Ordner: rimraf SourceFolder
Dies hat mir geholfen, als ich den Fehler erhielt:
Die Namen der Quelldateien sind größer als vom Dateisystem unterstützt
Ordner ältere Versionen von Windows (DOS, Windows 95/98 / ME), DELTREE
entspricht RM
oder RMDIR
. Ich verwende DELTREE
auf meiner Windows 7-Workstation in Batch-Dateien nur in Ordnung.
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.
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)"