Frage

Ich brauche einen Weg, um rekursiv einen Ordner und seine Kinder zu löschen.

Gibt es ein vorkompilierte Werkzeug dafür, oder brauche ich einen schreiben?

DEL /S nicht löschen Verzeichnisse.

DELTREE wurde von Windows 2000 +

entfernt
War es hilfreich?

Lösung

RMDIR oder RD, wenn Sie die klassische Eingabeaufforderung (cmd.exe) verwenden:

rd /s /q "path"

Wenn Sie Powershell verwenden, können Sie verwenden Remove-Item (die del aliased ist, erase, rd, ri, rm und rmdir) und nimmt ein -Recurse Argument, das kurzgeschlossen werden kann, um -r

rd -r "path"

Andere Tipps

Admin:

takeown /r /f folder
cacls folder /c /G "ADMINNAME":F /T
rmdir /s folder

Werke für alles einschließlich sys-Dateien

EDIT: Ich fand die beste Art und Weise, die auch Dateipfad zu lang Problem auch gelöst:

mkdir \empty
robocopy /mir \empty folder

RMDIR [/S] [/Q] [drive:]path

RD [/S] [/Q] [drive:]path

  • /S Entfernt alle Verzeichnisse und Dateien im angegebenen Verzeichnis zusätzlich zu dem Verzeichnis selbst. verwendet, um einen Verzeichnisbaum zu entfernen.

  • /Q Quiet-Modus, fragen Sie nicht, wenn die Verzeichnisbäume mit /S

  • entfernen

Sie können installieren Cygwin, die auch als rm etc ls hat.

auf den Pfad gehen und diesen Befehl auslösen.

rd /s /q "FOLDER_NAME"

/ s: Entfernt das angegebene Verzeichnis und alle Unterverzeichnisse einschließlich aller Dateien. Verwenden Sie / s, einen Baum zu entfernen.

/ q: Führt rmdir im stillen Modus. Löscht Verzeichnisse ohne Bestätigung.

/? : An der Eingabeaufforderung Zeigt Hilfe

.

Für das Löschen eines Verzeichnisses (ob oder nicht vorhanden) verwenden die folgenden Möglichkeiten:

if exist myfolder ( rmdir /s/q myfolder )

rmdir /S /Q %DIRNAME%

rmdir / s dirname

Versuchen Sie diesen Befehl ein:

del /s foldername

Lassen Sie uns zuerst überprüfen, was rm -rf tut:

C:\Users\ohnob\things>touch stuff.txt

C:\Users\ohnob\things>rm -rf stuff.txt

C:\Users\ohnob\things>mkdir stuff.txt

C:\Users\ohnob\things>rm -rf stuff.txt

C:\Users\ohnob\things>ls -l
total 0

C:\Users\ohnob\things>rm -rf stuff.txt

Es gibt drei Szenarien, in denen rm -rf häufig verwendet wird, wo es erwartet wird, 0 zurück:

  1. Der angegebene Pfad existiert nicht.
  2. Der angegebene Pfad existiert und ein Verzeichnis ist.
  3. Der angegebene Pfad existiert und eine Datei.

Ich werde die ganze Sache Berechtigungen ignorieren, aber niemand nutzt Berechtigungen oder versucht, sich selbst schreiben sowieso auf die Dinge in Windows den Zugriff zu verweigern (OK, das ist gemeint, ein Witz zu sein ...).

Satz ERRORLEVEL auf 0 und dann den Pfad nur löschen, wenn es vorhanden ist, verschiedene Befehle je nachdem, ob oder nicht es ist ein Verzeichnis. IF EXIST nicht ERRORLEVEL auf 0 gesetzt, wenn der Pfad nicht existiert, so die ERRORLEVEL auf 0 setzt zunächst notwendig ist richtig Erfolg in einer Art und Weise zu erfassen, dass imitiert normale rm -rf Nutzung. Schützen den RD mit IF EXIST ist notwendig, weil RD, im Gegensatz zu rm -f, wirft einen Fehler, wenn das Ziel nicht existiert.

Der folgende Skript-Schnipsel davon aus, dass DELPATH prequoted wird. (Dies ist sicher, wenn Sie so etwas wie SET DELPATH=%1 tun. Versuchen Sie ECHO %1 in einem .cmd setzen 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 für Fehler überprüfen mit 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%

Punkt ist, ist alles einfacher, wenn die Umgebung passt nur zu POSIX. Oder wenn Sie eine minimale MSYS installieren und nur diese verwenden.

Sie können installieren GnuWin32 und Verwendung * nichts nativ auf Windows-Befehle. Ich installiere, bevor ich irgendetwas anderes auf einer minzig frische Kopie von Windows zu installieren. :)

Hier ist, was Sie tun müssen ...

Erstellen Sie eine Batch-Datei mit der folgenden Zeile

RMDIR /S %1

Speichern Sie Ihre Batch-Datei als Remove.bat und steckt es in C:\windows

Erstellen Sie den folgenden Registrierungsschlüssel

HKEY_CLASSES_ROOT\Directory\shell\Remove Directory (RMDIR)

Starten Sie regedit und aktualisieren den Standardwert HKEY_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 dem rechten einem beliebigen Verzeichnis klicken und verwenden Sie die RMDIR Funktion

Mit Powershell 5.1

 get-childitem *logs* -path .\ -directory -recurse | remove-item -confirm:$false -recurse -force

Ersetzen Sie Protokolle mit dem Verzeichnisnamen, den Sie löschen möchten.

get-childitem sucht nach dem Kinder-Verzeichnis mit dem Namen rekursiv aus Strompfad (.).

remove-item löscht das Ergebnis aus.

Die akzeptierte Antwort ist groß, aber vorausgesetzt, Sie haben Knoten installiert haben, können Sie dies tun, viel genauer mit dem Knoten Bibliothek „rimraf“, die Muster Globbing ermöglicht. Wenn Sie diese viel verwenden (ich), nur installieren Sie es global.

yarn global add rimraf

dann zum Beispiel verwende ein Muster, das ich immer wieder:

rimraf .\**\node_modules

oder für einen Einzeiler, dass sie Ihnen die globalen ausweichen installieren, aber die für den das Paket dynamischen Download etwas länger dauert:

npx rimraf .\**\node_modules

Hier ist das, was für mich gearbeitet:

Versuchen Sie einfach, die Länge des Weges abnimmt. d.h :: alle Ordner umbenennen, die kleinste mögliche Namen zu einer solchen Datei führen. Sagen Sie einen Buchstaben-Namen. Gehen Sie weiter nach oben in der Ordnerhierarchie umbenennen. Durch diese u die Weglänge effektiv reduzieren. Nun endlich versuchen, die Datei sofort zu löschen.

über Powershell

 Remove-Item -Recurse -Force "TestDirectory"

über die Eingabeaufforderung

https://stackoverflow.com/a/35731786/439130

VERWENDUNG AUF EIGENE GEFAHR. INFORMATIONEN ZUR VERFÜGUNG GESTELLT WERDEN SO, WIE '. NICHT getestet.

Rechtsklick auf Windows-Symbol (in der Regel links unten)> klicken Sie auf „Windows Powershell (Admin)“> Mit diesem Befehl (mit der gebotenen Sorgfalt, können Sie einfach alle Dateien löschen, wenn Sie nicht vorsichtig sind):

rd -r -include *.* -force somedir

Wo somedir ist das nicht leere Verzeichnis, das Sie entfernen möchten.

Beachten Sie, dass mit externen angeschlossenen Platten oder Disketten mit Fragen Windows verhält sich manchmal seltsam - es funktioniert nicht Fehler in der delete (oder eine Kopie Versuch), noch das Verzeichnis nicht gelöscht (oder nicht kopiert), wie angewiesen. (Ich fand, dass in diesem Fall zumindest für mich, der Befehl von @n_y in seiner Antwort gegeben wird Fehler produzieren wie ‚get-childitem. Die Datei oder das Verzeichnis ist beschädigt und nicht lesbar‘ als Ergebnis in Powershell)

Es gibt auch deltree, wenn Sie auf einer älteren Windows-Version.

Ich mag diese Seite wirklich Befehle für die Suche: SS64: Del - Löschen von Dateien

del / s / q directorytobedeleted

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top