Angenommen, es gibt eine Variable mit dem Namen %pathtofolder%
, da deutlich wird, dass es sich um einen vollständigen Pfad eines Ordners handelt.
Ich möchte jede einzelne Datei und jeden Unterordner in diesem Verzeichnis löschen, aber nicht das Verzeichnis selbst.
Möglicherweise liegt jedoch ein Fehler wie "Diese Datei / dieser Ordner wird bereits verwendet" vor. In diesem Fall sollte die Datei / der Ordner einfach fortgesetzt und übersprungen werden.
Gibt es dafür einen Befehl?
rm -rf path\to\folder
funktioniert in Windows 10 (oder könnte von Git Bash kommen ... so oder so, wenn Sie haben, dass es ein Versuch ist!)Antworten:
Mit diesem Shell-Skript können Sie den Ordner und die Dateien in der
C:\Temp
Quelle bereinigen :Erstellen Sie eine Batchdatei (z. B. delete.bat) mit dem obigen Befehl. Gehen Sie zu dem Speicherort, an dem sich die Datei delete.bat befindet, und führen Sie den folgenden Befehl aus: delete.bat
quelle
%p
rmdir
ist mein absoluter Lieblingsbefehl für diesen Job. Es funktioniert zum Löschen großer Dateien und Ordner mit Unterordnern. Es wird keine Sicherung erstellt. Stellen Sie daher sicher, dass Sie Ihre Dateien sicher kopiert haben, bevor Sie diesen Befehl ausführen.Dadurch werden der Ordner sowie alle Dateien und Unterordner unbemerkt entfernt.
quelle
md FOLDERNAME
(siehe Antwort von @rakoczyn unten).cd "FOLDERNAME"
RD . /S /Q
Die einfachste Lösung, die ich mir vorstellen kann, ist das Entfernen des gesamten Verzeichnisses mit
Dann erstellen Sie dieses Verzeichnis erneut:
quelle
Dadurch werden die Ordner und Dateien entfernt und der Ordner bleibt zurück.
quelle
2>nul
gibt es aus "Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird."RD /?
zeigt Ihnen die einfache Möglichkeit, einen Ordner zu leeren.CD mypath && RD /S .
würde es einfach ausreichen. Ich mag es nicht, dass Sie Ihren Pfad zweimal wiederholen müssen, für lange Pfade wird es schwer zu lesen. Also würde ichset p="mypath"
am Anfang einfach ein hinzufügen .... löscht alle Dateien und Ordner unter dem angegebenen Verzeichnis, jedoch nicht das Verzeichnis selbst.
quelle
/A
, auch Dateien mit verstecktem Attributsatz zu löschen, und%dir%\*
sollte in doppelte Anführungszeichen gesetzt werden"%dir%\*"
, um auch für Verzeichnisse zu funktionieren, die ein Leerzeichen oder eines dieser Zeichen enthalten&()[]{}^=;!'+,`~
. Die FOR- Befehlszeile sollte geändert werden,for /F "eol=| delims=" %%I in ('dir "%dir%\*" /AD /B 2^>nul') do rd /Q /S "%dir%\%%I"
da FOR Verzeichnisse mit ausgeblendeten Attributen ignoriert. DIR mit Optionen/AD /B
gibt alle Verzeichnisse nur mit ihren Namen aus. Übrigens:dir
ist kein guter Name für eine Umgebungsvariable.Sie erhalten eine Fehlermeldung, dass der RMDIR-Befehl nicht auf den aktuellen Ordner zugreifen und ihn daher nicht löschen kann.
Update :
Aus diesem nützlichen Kommentar (dank Moritz Both ) können Sie
&&
dazwischen hinzufügen , sodass erRMDIR
nicht ausgeführt wird, wenn derCD
Befehl fehlschlägt (z. B. falsch eingegebener Verzeichnisname):Aus der Windows-Befehlszeilenreferenz :
quelle
cd [Your_Folder]
ist sehr wichtig - ich muss mich daran erinnern, damit ich das Verzeichnis selbst nicht lösche ...&&
zwischen den Befehlen anstelle des Zeilenumbruchs hinzu, und Sie sind vor einer fehlerhaften CD sicher.RD steht für REMOVE Directory.
/ S: Löscht alle Dateien und Unterordner zusätzlich zum Ordner selbst. Verwenden Sie diese Option, um einen gesamten Ordnerbaum zu entfernen.
/ F: Leise - YN-Bestätigung nicht anzeigen
Beispiel:
quelle
/S
und/Q
bedeutetrd
ist äquivalent zurmdir
und entfernt das Verzeichnis selbst und ist nicht das, was OP will.Ich benutze Powershell
Der Inhalt des Ordners wird entfernt, nicht der Ordner selbst.
quelle
powershell -Command "Remove-Item 'PathToMyDirectory\*' -Recurse -Force"
Keine der am 01.06.2018 veröffentlichten Antworten, mit Ausnahme der einzelnen Befehlszeile von foxidrive , hat wirklich alle Dateien und alle Ordner / Verzeichnisse in gelöscht
%PathToFolder%
. Dies ist der Grund für das Posten einer weiteren Antwort mit einer sehr einfachen Befehlszeile zum Löschen aller Dateien und Unterordner eines Ordners sowie einer Batchdatei mit einer komplexeren Lösung, in der erklärt wird, warum alle anderen Antworten am 01.06.2018 mit DEL veröffentlicht wurden und FOR mit RD konnte einen Ordner nicht vollständig bereinigen.Die einfache Einzelbefehlszeilenlösung, die natürlich auch in einer Batchdatei verwendet werden kann:
Diese Befehlszeile enthält drei Befehle, die nacheinander ausgeführt werden.
Der erste Befehl PUSHD überträgt den aktuellen Verzeichnispfad auf den Stapel und macht den nächsten
%PathToFolder%
das aktuelle Verzeichnis zum Ausführen des Befehlsprozesses.Dies funktioniert standardmäßig auch für UNC- Pfade, da Befehlserweiterungen standardmäßig aktiviert sind und in diesem Fall PUSHD erstellt einen temporären Laufwerksbuchstaben, der auf die angegebene Netzwerkressource verweist, und ändert dann das aktuelle Laufwerk und Verzeichnis mithilfe des neu definierten Laufwerksbuchstabens.
PUSHD gibt die folgende Fehlermeldung aus, um STDERR zu behandeln, wenn das angegebene Verzeichnis überhaupt nicht vorhanden ist:
Diese Fehlermeldung wird unterdrückt, indem sie
2>nul
an das Gerät NUL umgeleitet wird .Der nächste Befehl RD wird nur ausgeführt, wenn das Ändern des aktuellen Verzeichnisses für den aktuellen Befehlsprozess in das angegebene Verzeichnis erfolgreich war, dh das angegebene Verzeichnis überhaupt existiert.
Der Befehl RD mit den Optionen
/Q
und/S
entfernt leise ein Verzeichnis mit allen Unterverzeichnissen, auch wenn das angegebene Verzeichnis Dateien oder Ordner mit ausgeblendeten Attributen oder mit schreibgeschützten Attributen enthält. Das Systemattribut verhindert niemals das Löschen einer Datei oder eines Ordners.Nicht gelöscht sind:
Ordner, die als aktuelles Verzeichnis für einen laufenden Prozess verwendet werden. Der gesamte Ordnerbaum eines solchen Ordners kann nicht gelöscht werden, wenn ein Ordner als aktuelles Verzeichnis für einen laufenden Prozess verwendet wird.
Dateien, die derzeit von einem laufenden Prozess geöffnet werden, wobei die Dateizugriffsberechtigungen für "Datei geöffnet" festgelegt sind, um das Löschen der Datei beim Öffnen durch die laufende Anwendung / den laufenden Prozess zu verhindern. Eine solche geöffnete Datei verhindert auch das Löschen des gesamten Ordnerbaums in der geöffneten Datei.
Dateien / Ordner, für die der aktuelle Benutzer nicht über die erforderlichen Berechtigungen (NTFS) zum Löschen der Datei / des Ordners verfügt, wodurch auch das Löschen des Ordnerbaums in diese Datei / diesen Ordner verhindert wird.
Der erste Grund, warum ein Ordner nicht gelöscht wird, wird von dieser Befehlszeile verwendet, um alle Dateien und Unterordner des angegebenen Ordners zu löschen, nicht jedoch den Ordner selbst. Der Ordner wird vorübergehend zum aktuellen Verzeichnis für die Ausführung des Befehlsprozesses gemacht, wodurch das Löschen des Ordners selbst verhindert wird. Dies führt natürlich zur Ausgabe einer Fehlermeldung mit dem Befehl RD :
Datei ist hier der falsche Begriff, da der Ordner in Wirklichkeit von einem anderen Prozess verwendet wird, dem aktuellen Befehlsprozess, der den Befehl RD ausgeführt hat . Nun, in Wirklichkeit ein Ordner ist für das Dateisystem eine spezielle Datei mit Dateiattribut Verzeichnis , die diese Fehlermeldung erklärt. Aber ich möchte nicht zu tief in die Dateisystemverwaltung einsteigen.
Diese Fehlermeldung wird wie alle anderen Fehlermeldungen, die aus den drei oben genannten Gründen auftreten können, unterdrückt, indem sie
2>nul
vom Handle STDERR zum Gerät NUL umgeleitet wird .Der dritte Befehl, POPD , wird unabhängig vom Exit-Wert des Befehls RD ausgeführt .
POPD öffnet den von PUSHD geposteten Verzeichnispfad vom Stapel und ändert das aktuelle Verzeichnis zum Ausführen des Befehlsprozesses in dieses Verzeichnis, dh stellt das ursprüngliche aktuelle Verzeichnis wieder her. POPD löscht den von PUSHD erstellten temporären Laufwerksbuchstaben im Falle eines UNC- Ordnerpfads .
Hinweis: POPD kann das ursprüngliche aktuelle Verzeichnis möglicherweise nicht wiederherstellen, wenn das anfängliche aktuelle Verzeichnis ein Unterverzeichnis des zu bereinigenden Verzeichnisses war, das nicht mehr vorhanden ist. In diesem Sonderfall
%PathToFolder%
bleibt das aktuelle Verzeichnis. Es ist daher ratsam, die obige Befehlszeile nicht in einem Unterverzeichnis von auszuführen%PathToFolder%
.Eine weitere interessante Tatsache: Ich habe versucht, die Befehlszeile auch unter Verwendung eines UNC-Pfads zu verwenden, indem ich das lokale Verzeichnis
C:\Temp
mit dem Freigabenamen freigegebenTemp
und den UNC-Pfad verwendet habe,\\%COMPUTERNAME%\Temp\CleanTest
der der UmgebungsvariablenPathToFolder
unter Windows 7 zugewiesen wurde . Wenn das aktuelle Verzeichnis beim Ausführen der Befehlszeile ein Unterverzeichnis eines freigegebenen lokalen Verzeichnisses ist Der Ordner, auf den über den UNC-Pfad zugegriffen wirdC:\Temp\CleanTest\Subfolder1
,Subfolder1
wird von RD gelöscht , und das nächste POPD schlägt stillschweigendC:\Temp\CleanTest\Subfolder1
das aktuelle Verzeichnis wieder her, sodass esZ:\CleanTest
als aktuelles Verzeichnis für den ausgeführten Befehlsprozess verbleibt. In diesem ganz besonderen Fall bleibt der temporäre Laufwerksbuchstabe so lange bestehen, bis das aktuelle Verzeichnis beispielsweise mit geändert wirdcd /D %SystemRoot%
in ein wirklich vorhandenes lokales Verzeichnis. Leider wird POPDwird nicht mit einem Wert größer 0 beendet, wenn das ursprüngliche aktuelle Verzeichnis nicht wiederhergestellt werden kann, sodass es unmöglich ist, diesen ganz besonderen Fehlerzustand nur mit dem Exit-Code von POPD zu erkennen . Es kann jedoch davon ausgegangen werden, dass niemand jemals auf diesen ganz besonderen Fehlerfall stößt, da UNC-Pfade normalerweise nicht für den Zugriff auf lokale Dateien und Ordner verwendet werden.Um die verwendeten Befehle noch besser zu verstehen, öffnen Sie ein Eingabeaufforderungsfenster, führen Sie dort die folgenden Befehle aus und lesen Sie die für jeden Befehl angezeigte Hilfe sorgfältig durch.
pushd /?
popd /?
rd /?
Einzelne Linie mit mehreren Befehlen Windows - Batch - Datei erklärt die Operatoren
&&
und&
verwendet hier.Als nächstes betrachten wir die Batch-Dateilösung mit dem Befehl DEL zum Löschen von Dateien in
%PathToFolder%
und FOR und RD zum Löschen der Unterordner in%PathToFolder%
.Die Batch-Datei stellt zunächst sicher, dass die Umgebungsvariable
PathToFolder
wirklich mit einem Ordnerpfad ohne doppelte Anführungszeichen und ohne Backslash am Ende definiert ist. Der Backslash am Ende wäre kein Problem, aber doppelte Anführungszeichen in einem Ordnerpfad könnten problematisch sein, da der Wert vonPathToFolder
während der Ausführung der Batchdatei mit anderen Zeichenfolgen verkettet wird.Wichtig sind die beiden Zeilen:
Mit dem Befehl DEL werden alle Dateien im angegebenen Verzeichnis gelöscht.
/A
ist erforderlich, um wirklich alle Dateien zu verarbeiten, einschließlich Dateien mit dem versteckten Attribut, das DEL ohne Verwendung der Option ignorieren würde/A
./F
ist erforderlich, um das Löschen von Dateien mit dem schreibgeschützten Attributsatz zu erzwingen./Q
ist erforderlich, um mehrere Dateien stillschweigend zu löschen, ohne den Benutzer zu fragen, ob mehrere Dateien wirklich gelöscht werden sollen.>nul
ist erforderlich, um die Ausgabe der für STDOUT geschriebenen Dateinamen auf das Gerät NUL umzuleiten , das nicht gelöscht werden kann, da gerade eine Datei geöffnet ist oder der Benutzer keine Berechtigung zum Löschen der Datei hat.2>nul
ist erforderlich, um die Ausgabe der Fehlermeldung für jede Datei, die nicht vom Handle STDERR gelöscht werden kann, an das Gerät NUL umzuleiten .Mit den Befehlen FOR und RD werden alle Unterverzeichnisse im angegebenen Verzeichnis entfernt. Wird
for /D
aber nicht verwendet, da FOR in diesem Fall Unterverzeichnisse mit dem versteckten Attributsatz ignoriert. Aus diesem Grundfor /F
wird die folgende Befehlszeile in einem separaten Befehlsprozess ausgeführt, der im Hintergrund mit gestartet wird%ComSpec% /c
:DIR- Ausgaben im Bare-Format aufgrund
/B
der Verzeichniseinträge mit AttributD
, dh der Namen aller Unterverzeichnisse im angegebenen Verzeichnis, unabhängig von anderen Attributen wie dem versteckten Attribut ohne Pfad.2>nul
wird verwendet, um die von DIR ausgegebene Fehlermeldung in einem Verzeichnis, das vom Handle STDERR gefunden wurde, an das Gerät NUL umzuleiten .Der Umleitungsoperator
>
muss mit dem Caret-Zeichen^
in der FOR- Befehlszeile maskiert werden, um als Literalzeichen interpretiert zu werden, wenn der Windows-Befehlsinterpreter diese Befehlszeile verarbeitet, bevor der Befehl FOR ausgeführt wird, der die eingebettetedir
Befehlszeile in einem separaten Befehlsprozess ausführt im Hintergrund.FOR verarbeitet die erfasste Ausgabe, die für STDOUT eines gestarteten Befehlsprozesses geschrieben wurde. Dies sind die Namen der Unterverzeichnisse ohne Pfad, die niemals in doppelte Anführungszeichen gesetzt werden.
FOR mit Option
/F
ignoriert leere Zeilen, die hier nicht vorkommen, da DIR mit Option/B
keine leeren Zeilen ausgibt.FOR würde auch Zeilen ignorieren, die mit einem Semikolon beginnen, das das Standardzeichen für das Zeilenende ist. Ein Verzeichnisname kann mit einem Semikolon beginnen. Aus diesem Grund
eol=|
wird das vertikale Balkenzeichen als Zeilenendezeichen definiert, dessen Name kein Verzeichnis oder keine Datei enthalten darf.FOR würde die Zeile unter Verwendung von Leerzeichen und horizontaler Tabulator als Trennzeichen in Teilzeichenfolgen aufteilen und der angegebenen Schleifenvariablen nur die erste durch Leerzeichen / Tabulatoren getrennte Zeichenfolge zuweisen
I
. Dieses Aufteilungsverhalten ist hier nicht erwünscht, da ein Verzeichnisname ein oder mehrere Leerzeichen enthalten kann. Daherdelims=
wird eine leere Liste von Trennzeichen definiert, um das Verhalten der Zeilenteilung zu deaktivieren und der SchleifenvariablenI
immer den vollständigen Verzeichnisnamen zuzuweisen .Der Befehl FOR führt den Befehl RD für jeden Verzeichnisnamen ohne Pfad aus. Aus diesem Grund muss in der RD- Befehlszeile der Ordnerpfad erneut angegeben werden, der mit dem Namen des Unterordners verknüpft ist.
Um die verwendeten Befehle und ihre Funktionsweise zu verstehen, öffnen Sie ein Eingabeaufforderungsfenster, führen Sie dort die folgenden Befehle aus und lesen Sie alle Hilfeseiten, die für jeden Befehl angezeigt werden, sorgfältig durch.
del /?
dir /?
echo /?
endlocal /?
for /?
goto /?
if /?
rd /?
rem /?
set /?
setlocal /?
quelle
Verwenden Sie den Editor , um ein Textdokument zu erstellen und dieses zu kopieren / einzufügen:
Wählen Sie Speichern unter und Dateiname:
Dateityp: Alle Dateien und klicken Sie auf die SaveSchaltfläche.
Es funktioniert auf jeder Art von Konto (Administrator oder Standardbenutzer). Lass es einfach laufen!
In diesem Beispiel verwende ich eine temporäre Variable, aber Sie können jede andere verwenden! PS: Nur für Windows!
quelle
So löschen Sie eine Datei:
So löschen Sie einen Ordner mit allen darin enthaltenen Dateien:
Das Löschen aller Dateien aus einem bestimmten Ordner (nicht das Löschen des Ordners selbst) ist etwas kompliziert.
del /s *.*
Ordner können nicht gelöscht werden, entfernt jedoch Dateien aus allen Unterordnern. Es werden also zwei Befehle benötigt:quelle
/A
, auch Dateien mit verstecktem Attributsatz/F
zu löschen , und die Option , auch Dateien mit schreibgeschütztem Attributsatz und doppelten Anführungszeichen um das letzte Argument zu löschen. Wäredel /A /F /Q "PATH_TO_FOLDER\*"
also besser. Die FOR- Befehlszeile sollte geändert werden,for /F "eol=| delims=" %%I in ('dir "PATH_TO_FOLDER\*" /AD /B 2^>nul') do rd /Q /S "PATH_TO_FOLDER\%%I"
da FOR Verzeichnisse mit ausgeblendeten Attributen ignoriert. DIR mit Optionen/AD /B
gibt alle VerzeichnissePATH_TO_FOLDER
nur mit ihren Namen aus.Sie können dies tun, indem Sie den folgenden Befehl verwenden, um alle Inhalte und den übergeordneten Ordner selbst zu löschen:
quelle
Ich habe mehrere dieser Ansätze ausprobiert, aber keiner hat richtig funktioniert.
Ich habe diesen zweistufigen Ansatz auf der Windows-Befehlszeile der Site gefunden :
Es funktionierte genau so, wie ich es brauchte und wie es vom OP angegeben wurde.
quelle
forfiles /P "%pathtofolder%" /M * /C "%SystemRoot%\System32\cmd.exe /C if @isdir==FALSE (del /A /F @file) else rd /Q /S @file"
DEL/A
wird hinzugefügt, um auch Dateien mit ausgeblendeten Attributen zu löschen, da DEL sonst für jede ausgeblendete Datei in eine nicht gefundene Fehlermeldung ausgeben würde%pathtofolder%
. Die Option DEL/F
wird hinzugefügt, um auch Dateien mit aktiviertem schreibgeschützten Attribut zu löschen,%pathtofolder%
da DEL andernfalls eine Fehlermeldung ausgeben würde, dass der Zugriff verweigert wird.cmd.exe
für jede Datei und jedes Verzeichnis eine Instanz gestartet wird%pathtofolder%
. Der Vorteil ist, dass FORFILES Verzeichnisse mit ausgeblendeten Attributen nicht wie FOR ignoriert .quelle
for /F "eol=| delims=" %%I in ('dir "%TEMP%\*" /AD /B 2^>nul') do rd /Q /S "%TEMP%\%%I"
da FOR Verzeichnisse mit ausgeblendeten Attributen ignoriert. DIR mit Optionen/AD /B
gibt alle Verzeichnisse%TEMP%
nur mit ihren Namen aus.Verwenden:
Dadurch werden alle Dateien und Unterordner gelöscht
%pathtofolder%
, einschließlich schreibgeschützter Dateien, und es wird keine Bestätigung angefordert.quelle