Funktioniert del / s (a) überhaupt nicht (es ist nur in einigen Versionen verfügbar) oder (b) verlässt das Verzeichnis der obersten Ebene, löscht aber alles darunter oder (c) verlässt alle Verzeichnisse, während alle Dateien gelöscht werden?
wnoise
@ Aaron, antworte c, du musst rmdir / s verwenden, um Verzeichnisse und Dateien zu entfernen.
Wedge
31
Ist es format c:dann nicht wirklich die Installation von Linux? Ich scherze natürlich.
Basile Starynkevitch
Antworten:
694
RMDIR oder RD, wenn Sie die klassische Eingabeaufforderung (cmd.exe) verwenden:
rd /s /q "path"
RMDIR [/ S] [/ Q] [Laufwerk:] Pfad
RD [/ S] [/ Q] [Laufwerk:] Pfad
/ S Entfernt alle Verzeichnisse und Dateien im angegebenen Verzeichnis zusätzlich zum Verzeichnis selbst. Wird zum Entfernen eines Verzeichnisbaums verwendet.
/ Q Ruhiger Modus, fragen Sie nicht, ob es in Ordnung ist, einen Verzeichnisbaum mit / S zu entfernen
Wenn Sie Powershell verwenden , können Sie verwenden Remove-Item(was aliased zu del, erase, rd, ri, rmund rmdir) und nimmt ein -RecurseArgument , das zu Kurzschluss kann-r
Es sei darauf hingewiesen, dass rmdir / s / q für eine große Anzahl von Dateien in der Regel erheblich schneller ist als die entsprechende Operation "Verzeichnis auswählen, verschieben + löschen" im Explorer.
Wedge
9
Dadurch werden keine Dateien gelöscht, wie dies bei rm -rf der Fall ist, und es wird auch ein Wert ungleich Null zurückgegeben, wenn das Verzeichnis nicht vorhanden ist. Dies schlägt rd /s /q foo && echo "yay"fehl, wenn das Verzeichnis "foo" nicht vorhanden ist.
Dirk Groeneveld
17
Was ist, wenn dir. nicht leer und einige Dateien bekommen Access is deniedund andere The process cannot access the file because it is being used by another process?
Eugene
6
Ich habe es gerade in sieben versucht und Sie müssen / S und / Q (Kappen)
Ford Präfekt
2
Hier verwirrt. Ich weiß, dass ich diesen Befehl ausprobiert habe und er nicht funktioniert hat, wenn sich Dateien im Verzeichnisbaum befanden. jetzt gehe ich zurück und. . . magisch scheint es zu funktionieren. Hat jemand anderes inkonsistentes Verhalten damit?!
Mein Held! Und ein Tipp: Sie erstellen Ihren leeren Ordner unter C: \ leer, und wenn Sie sich einmal in jedem verrückten Ordner befinden, können Sie dies einfach tunrobocopy /mir c:\empty .
Léon Pelletier,
Das takeownhat mir geholfen, als ich versehentlich einen Ordner mit rsync vom Linux-System kopiert habe und keine Berechtigung hatte, diesen Ordner zu entfernen ... Nicht einmal die Robokopie hat funktioniert. Danke
Jarda
1
Sehr schöne Antwort. Es klappt. (Alle anderen Antworten auf der Seite nicht). Aber cacls ist veraltet. Ist es möglich, eine zeitgemäße Antwort zu geben? Die zweite Variante funktioniert bereits und ist nicht veraltet.
Gangnus
Das tut nichts für mich. Könnte jemand bitte erklären, wie es funktionieren soll? (Robocopy) - Es könnte den Inhalt von Ordnern löschen, aber nicht die Ordner selbst
Ralf
114
RMDIR [/S] [/Q] [drive:]path
RD [/S] [/Q] [drive:]path
/S Entfernt alle Verzeichnisse und Dateien im angegebenen Verzeichnis zusätzlich zum Verzeichnis selbst. Wird zum Entfernen eines Verzeichnisbaums verwendet.
/Q Im ruhigen Modus fragen Sie nicht, ob es in Ordnung ist, einen Verzeichnisbaum mit zu entfernen /S
Die akzeptierte Antwort ist großartig, aber vorausgesetzt, Sie haben Node installiert, können Sie dies viel genauer mit der Knotenbibliothek "rimraf" tun, die Globbing-Muster ermöglicht. Wenn Sie dies häufig verwenden (ich tue es), installieren Sie es einfach global.
yarn global add rimraf
dann zum Beispiel ein Muster, das ich ständig benutze:
rimraf .\**\node_modules
oder für einen Einzeiler, mit dem Sie der globalen Installation ausweichen können, der für den dynamischen Download des Pakets jedoch etwas länger dauert:
arbeitete für mich in Kombination w / rmdir / s / q, da einige Dateien gesperrt waren und rmdir auf diesen fehlschlagen würde. del / foldername hat die gesperrten Dateien zerstört, wodurch rmdir das Root-Verzeichnis entfernen konnte. Nett.
Es gibt drei Szenarien, in denen rm -rfhäufig eine Rückkehr erwartet wird 0:
Der angegebene Pfad existiert nicht.
Der angegebene Pfad existiert und ist ein Verzeichnis.
Der angegebene Pfad existiert und ist eine Datei.
Ich werde die ganze Sache mit den Berechtigungen ignorieren, aber niemand verwendet Berechtigungen oder versucht, sich selbst den Schreibzugriff auf Dinge in Windows zu verweigern (OK, das soll ein Witz sein…).
Setzen SieERRORLEVEL zuerst den Wert 0 und löschen Sie den Pfad nur dann, wenn er vorhanden ist. Verwenden Sie dabei unterschiedliche Befehle, je nachdem, ob es sich um ein Verzeichnis handelt oder nicht. IF EXISTwird nicht ERRORLEVELauf 0 gesetzt , wenn der Pfad nicht vorhanden ist. Daher ERRORLEVEList es erforderlich, zuerst 0 zu setzen, um den Erfolg auf eine Weise zu erkennen, die die normale rm -rfVerwendung nachahmt . Das Bewachen des RDwith IF EXISTist erforderlich, da RDim Gegensatz rm -fdazu ein Fehler ausgegeben wird, wenn das Ziel nicht vorhanden ist.
Das folgende Skript-Snippet setzt voraus, dass DELPATH vorab in Anführungszeichen gesetzt ist. (Dies ist sicher , wenn Sie so etwas wie tun SET DELPATH=%1. Versuchen Sie setzen ECHO %1in ein .cmdund es ein Argument mit Leerzeichen in es vorbei und sehen , was für sich selbst passiert). Nachdem das Snippet abgeschlossen ist, können Sie mit auf Fehler prüfen IF ERRORLEVEL 1.
: # Determine whether we need to invoke DEL or RD or do nothing.
SET DELPATH_DELMETHOD=RD
PUSHD %DELPATH% 2>NUL
IF ERRORLEVEL 1 (SET DELPATH_DELMETHOD=DEL) ELSE (POPD)
IF NOT EXIST %DELPATH% SET DELPATH_DELMETHOD=NOOP
: # Reset ERRORLEVEL so that the last command which
: # otherwise set it does not cause us to falsely detect
: # failure.
CMD /C EXIT 0
IF %DELPATH_DELMETHOD%==DEL DEL /Q %DELPATH%
IF %DELPATH_DELMETHOD%==RD RD /S /Q %DELPATH%
Der Punkt ist, dass alles einfacher ist, wenn die Umgebung nur POSIX entspricht. Oder wenn Sie ein minimales MSYS installieren und dieses einfach verwenden.
Sie können GnuWin32 installieren und * nix-Befehle nativ unter Windows verwenden. Ich installiere dies, bevor ich etwas anderes auf einer minzfrischen Kopie von Windows installiere. :) :)
BENUTZUNG AUF EIGENE GEFAHR. INFORMATIONEN "WIE BESEHEN". NICHT UMFASSEND GETESTET.
Klicken Sie mit der rechten Maustaste auf das Windows-Symbol (normalerweise unten links)> klicken Sie auf "Windows PowerShell (Admin)"> verwenden Sie diesen Befehl (mit der gebotenen Sorgfalt können Sie alle Ihre Dateien problemlos löschen, wenn Sie nicht vorsichtig sind):
rd -r -include *.* -force somedir
Wo somedirist das nicht leere Verzeichnis, das Sie entfernen möchten?
Beachten Sie, dass sich Windows bei externen angeschlossenen Datenträgern oder Datenträgern mit Problemen manchmal merkwürdig verhält - beim Löschen (oder bei einem Kopierversuch) tritt kein Fehler auf, das Verzeichnis wird jedoch nicht wie angewiesen gelöscht (oder nicht kopiert). (Ich habe festgestellt, dass in diesem Fall, zumindest für mich, der von @n_y in seiner Antwort gegebene Befehl Fehler wie "get-childitem: Die Datei oder das Verzeichnis ist beschädigt und unlesbar" in PowerShell hervorruft.)
SPÄT, ABER WICHTIGE ANTWORT an alle, die Probleme bei der Installation von npm- Paketen auf einem Windows-Computer haben und wenn der Fehler " rm -rf..." Befehl nicht gefunden wird. Sie können die bash cli verwenden , um den Befehl rm unter Windows auszuführen.
Für npm-Benutzer können Sie die Konfiguration des npm auf npm config set script-shell "C:\Program Files\Git\bin\bash.exe"diese Weise ändern. Wenn das zu installierende npm-Paket über ein Skript nach der Installation verfügt , das den rm -rfBefehl verwendet, können Sie diesen rmBefehl ausführen, ohne Änderungen am npm-Paket vornehmen oder deaktivieren zu müssen die Konfiguration der Post-Install-Skripte. ( styled-componentsVerwendet beispielsweise den rmBefehl in den Skripten nach der Installation.)
Wenn Sie nur den rmBefehl verwenden möchten , können Sie einfach die Bash verwenden und die Argumente übergeben.
Ja, Sie können den Befehl 'rm' unter Windows verwenden.
Versuchen Sie einfach, die Länge des Pfades zu verringern. dh :: Benennen Sie alle Ordner, die zu einer solchen Datei führen, in kleinstmögliche Namen um. Sagen Sie einen Buchstaben Namen. Benennen Sie in der Ordnerhierarchie weiter nach oben um. Auf diese Weise reduzieren Sie effektiv die Pfadlänge. Versuchen Sie nun endlich, die Datei sofort zu löschen.
format c:
dann nicht wirklich die Installation von Linux? Ich scherze natürlich.Antworten:
RMDIR oder RD, wenn Sie die klassische Eingabeaufforderung (cmd.exe) verwenden:
Wenn Sie Powershell verwenden , können Sie verwenden
Remove-Item
(was aliased zudel
,erase
,rd
,ri
,rm
undrmdir
) und nimmt ein-Recurse
Argument , das zu Kurzschluss kann-r
quelle
rd /s /q foo && echo "yay"
fehl, wenn das Verzeichnis "foo" nicht vorhanden ist.Access is denied
und andereThe process cannot access the file because it is being used by another process
?Administrator:
Funktioniert für alles, einschließlich Sys-Dateien
EDIT: Ich habe tatsächlich den besten Weg gefunden, der auch das zu lange Problem mit dem Dateipfad löst:
quelle
robocopy /mir c:\empty .
takeown
hat mir geholfen, als ich versehentlich einen Ordner mit rsync vom Linux-System kopiert habe und keine Berechtigung hatte, diesen Ordner zu entfernen ... Nicht einmal die Robokopie hat funktioniert. DankeRMDIR [/S] [/Q] [drive:]path
RD [/S] [/Q] [drive:]path
/S
Entfernt alle Verzeichnisse und Dateien im angegebenen Verzeichnis zusätzlich zum Verzeichnis selbst. Wird zum Entfernen eines Verzeichnisbaums verwendet./Q
Im ruhigen Modus fragen Sie nicht, ob es in Ordnung ist, einen Verzeichnisbaum mit zu entfernen/S
quelle
Sie können cygwin installieren, das hat
rm
aber auchls
etc.quelle
Gehen Sie zum Pfad und lösen Sie diesen Befehl aus.
/ s: Entfernt das angegebene Verzeichnis und alle Unterverzeichnisse einschließlich aller Dateien. Verwenden Sie / s, um einen Baum zu entfernen.
/ q: Führt rmdir im leisen Modus aus. Löscht Verzeichnisse ohne Bestätigung.
/? : Zeigt die Hilfe an der Eingabeaufforderung an.
quelle
Verwenden Sie zum Löschen eines Verzeichnisses (unabhängig davon, ob es vorhanden ist oder nicht) Folgendes:
quelle
rmdir /S /Q %DIRNAME%
quelle
Die akzeptierte Antwort ist großartig, aber vorausgesetzt, Sie haben Node installiert, können Sie dies viel genauer mit der Knotenbibliothek "rimraf" tun, die Globbing-Muster ermöglicht. Wenn Sie dies häufig verwenden (ich tue es), installieren Sie es einfach global.
dann zum Beispiel ein Muster, das ich ständig benutze:
oder für einen Einzeiler, mit dem Sie der globalen Installation ausweichen können, der für den dynamischen Download des Pakets jedoch etwas länger dauert:
quelle
Versuchen Sie diesen Befehl:
quelle
rmdir / s dirname
quelle
Lassen Sie uns zunächst überprüfen, was Folgendes
rm -rf
bewirkt:Es gibt drei Szenarien, in denen
rm -rf
häufig eine Rückkehr erwartet wird0
:Ich werde die ganze Sache mit den Berechtigungen ignorieren, aber niemand verwendet Berechtigungen oder versucht, sich selbst den Schreibzugriff auf Dinge in Windows zu verweigern (OK, das soll ein Witz sein…).
Setzen Sie
ERRORLEVEL
zuerst den Wert 0 und löschen Sie den Pfad nur dann, wenn er vorhanden ist. Verwenden Sie dabei unterschiedliche Befehle, je nachdem, ob es sich um ein Verzeichnis handelt oder nicht.IF EXIST
wird nichtERRORLEVEL
auf 0 gesetzt , wenn der Pfad nicht vorhanden ist. DaherERRORLEVEL
ist es erforderlich, zuerst 0 zu setzen, um den Erfolg auf eine Weise zu erkennen, die die normalerm -rf
Verwendung nachahmt . Das Bewachen desRD
withIF EXIST
ist erforderlich, daRD
im Gegensatzrm -f
dazu ein Fehler ausgegeben wird, wenn das Ziel nicht vorhanden ist.Das folgende Skript-Snippet setzt voraus, dass DELPATH vorab in Anführungszeichen gesetzt ist. (Dies ist sicher , wenn Sie so etwas wie tun
SET DELPATH=%1
. Versuchen Sie setzenECHO %1
in ein.cmd
und es ein Argument mit Leerzeichen in es vorbei und sehen , was für sich selbst passiert). Nachdem das Snippet abgeschlossen ist, können Sie mit auf Fehler prüfenIF ERRORLEVEL 1
.Der Punkt ist, dass alles einfacher ist, wenn die Umgebung nur POSIX entspricht. Oder wenn Sie ein minimales MSYS installieren und dieses einfach verwenden.
quelle
über Powershell
über Eingabeaufforderung
https://stackoverflow.com/a/35731786/439130
quelle
Hier ist was Sie tun müssen ...
Erstellen Sie eine Batchdatei mit der folgenden Zeile
RMDIR /S %1
Speichern Sie Ihre Batch-Datei als
Remove.bat
und legen Sie sie abC:\windows
Erstellen Sie den folgenden Registrierungsschlüssel
HKEY_CLASSES_ROOT\Directory\shell\Remove Directory (RMDIR)
Starten
regedit
und aktualisieren Sie den StandardwertHKEY_CLASSES_ROOT\Directory\shell\Remove Directory (RMDIR)\default
mit dem folgenden Wert"c:\windows\REMOVE.bat" "%1"
Das ist es! Jetzt können Sie mit der rechten Maustaste auf ein beliebiges Verzeichnis klicken und die RMDIR-Funktion verwenden
quelle
Verwenden von Powershell 5.1
Ersetzen Sie Protokolle durch den Verzeichnisnamen, den Sie löschen möchten.
get-childitem sucht rekursiv nach dem Kinderverzeichnis mit dem Namen aus dem aktuellen Pfad (.).
remove-item löscht das Ergebnis.
quelle
Sie können GnuWin32 installieren und * nix-Befehle nativ unter Windows verwenden. Ich installiere dies, bevor ich etwas anderes auf einer minzfrischen Kopie von Windows installiere. :) :)
quelle
BENUTZUNG AUF EIGENE GEFAHR. INFORMATIONEN "WIE BESEHEN". NICHT UMFASSEND GETESTET.
Klicken Sie mit der rechten Maustaste auf das Windows-Symbol (normalerweise unten links)> klicken Sie auf "Windows PowerShell (Admin)"> verwenden Sie diesen Befehl (mit der gebotenen Sorgfalt können Sie alle Ihre Dateien problemlos löschen, wenn Sie nicht vorsichtig sind):
Wo
somedir
ist das nicht leere Verzeichnis, das Sie entfernen möchten?Beachten Sie, dass sich Windows bei externen angeschlossenen Datenträgern oder Datenträgern mit Problemen manchmal merkwürdig verhält - beim Löschen (oder bei einem Kopierversuch) tritt kein Fehler auf, das Verzeichnis wird jedoch nicht wie angewiesen gelöscht (oder nicht kopiert). (Ich habe festgestellt, dass in diesem Fall, zumindest für mich, der von @n_y in seiner Antwort gegebene Befehl Fehler wie "get-childitem: Die Datei oder das Verzeichnis ist beschädigt und unlesbar" in PowerShell hervorruft.)
quelle
SPÄT, ABER WICHTIGE ANTWORT an alle, die Probleme bei der Installation von npm- Paketen auf einem Windows-Computer haben und wenn der Fehler "
rm -rf...
" Befehl nicht gefunden wird. Sie können die bash cli verwenden , um den Befehl rm unter Windows auszuführen.Für npm-Benutzer können Sie die Konfiguration des npm auf
npm config set script-shell "C:\Program Files\Git\bin\bash.exe"
diese Weise ändern. Wenn das zu installierende npm-Paket über ein Skript nach der Installation verfügt , das denrm -rf
Befehl verwendet, können Sie diesenrm
Befehl ausführen, ohne Änderungen am npm-Paket vornehmen oder deaktivieren zu müssen die Konfiguration der Post-Install-Skripte. (styled-components
Verwendet beispielsweise denrm
Befehl in den Skripten nach der Installation.)Wenn Sie nur den
rm
Befehl verwenden möchten , können Sie einfach die Bash verwenden und die Argumente übergeben.Ja, Sie können den Befehl 'rm' unter Windows verwenden.
quelle
Folgendes hat bei mir funktioniert:
Versuchen Sie einfach, die Länge des Pfades zu verringern. dh :: Benennen Sie alle Ordner, die zu einer solchen Datei führen, in kleinstmögliche Namen um. Sagen Sie einen Buchstaben Namen. Benennen Sie in der Ordnerhierarchie weiter nach oben um. Auf diese Weise reduzieren Sie effektiv die Pfadlänge. Versuchen Sie nun endlich, die Datei sofort zu löschen.
quelle
Es gibt auch Deltree, wenn Sie eine ältere Version von Windows verwenden.
Ich mag diese Seite wirklich, um Befehle zu finden: SS64: Löschen - Dateien löschen
quelle
del / s / q Verzeichnis wurde gelöscht
quelle