Angenommen, es gibt eine Variable mit dem Namen %pathtofolder%
, da sie verdeutlicht, dass es sich um einen vollständigen Pfad eines Ordners handelt.
Ich möchte jede einzelne Datei und jeden einzelnen Unterordner in diesem Verzeichnis löschen, aber nicht das Verzeichnis selbst.
Es kann jedoch ein Fehler wie "Diese Datei/dieser Ordner wird bereits verwendet" auftreten. In diesem Fall sollte die Datei/der Ordner einfach fortgesetzt und übersprungen werden.
Kann mir jemand einen Befehl dafür geben?
Mit diesem Shell-Skript können Sie den Ordner und die Dateien in C:\Temp
source bereinigen:
del /q "C:\Temp\*"
FOR /D %%p IN ("C:\Temp\*.*") DO rmdir "%%p" /s /q
Erstellen Sie eine Batch-Datei (z. B. delete.bat), die den obigen Befehl enthält. Wechseln Sie zu dem Speicherort, an dem sich die Datei delete.bat befindet, und führen Sie den folgenden Befehl aus: delete.bat
rmdir
ist mein absoluter Lieblingsbefehl für den 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.
RMDIR "FOLDERNAME" /S /Q
Dadurch werden im Hintergrund der Ordner sowie alle Dateien und Unterordner entfernt.
Die einfachste Lösung, die ich mir vorstellen kann, ist das Entfernen des gesamten Verzeichnisses mit
RD /S /Q folderPath
Erstellen Sie dann dieses Verzeichnis erneut:
MD folderPath
Dadurch werden die Ordner und Dateien entfernt und der Ordner bleibt zurück.
pushd "%pathtofolder%" && (rd /s /q "%pathtofolder%" 2>nul & popd)
@ECHO OFF
Set dir=path-to-dir
Echo Deleting all files from %dir%
del %dir%\* /F /Q
Echo Deleting all folders from %dir%
for /d %%p in (%dir%\*) Do rd /Q /S "%%p"
@echo Folder deleted.
exit
... löscht alle Dateien und Ordner unterhalb des angegebenen Verzeichnisses, jedoch nicht das Verzeichnis selbst.
CD [Your_Folder]
RMDIR /S /Q .
Sie erhalten eine Fehlermeldung, dass der Befehl RMDIR nicht auf den aktuellen Ordner zugreifen kann und ihn daher nicht löschen kann.
Update :
Ab this nützlicher Kommentar (dank Moritz Both ) können Sie &&
hinzufügen, sodass RMDIR
nicht ausgeführt wird, wenn der Befehl CD
fehlschlägt (z. B. Verzeichnis falsch eingegeben) Name):
CD [Your_Folder] && RMDIR /S /Q .
Von Windows-Befehlszeilenreferenz :
/S: Löscht einen Verzeichnisbaum (das angegebene Verzeichnis und alle seine Unterverzeichnisse, einschließlich aller Dateien).
/Q: Gibt den stillen Modus an. Fordert beim Löschen eines Verzeichnisbaums nicht zur Bestätigung auf. (Beachten Sie, dass/q nur funktioniert, wenn/s angegeben ist.)
RD steht für REMOVE Directory.
/ S: Löscht alle Dateien und Unterordner zusätzlich zum Ordner. Verwenden Sie diese Option, um einen gesamten Ordnerbaum zu entfernen.
/ Q: Leise - YN-Bestätigung nicht anzeigen
Beispiel
RD /S /Q C:/folder_path/here
Ich benutze Powershell
Remove-Item c:\scripts\* -recurse
Der Inhalt des Ordners wird entfernt, nicht der Ordner selbst.
Mit dem folgenden Befehl können Sie alle Inhalte und den übergeordneten Ordner selbst löschen:
RMDIR [/S] [/Q] [drive:]path
Verwenden Sie den Editor, um ein Textdokument zu erstellen und kopieren Sie diese:
rmdir /s/q "%temp%"
mkdir "%temp%"
Wählen Sie Speichern unter, Dateiname:
delete_temp.bat
Dateityp: Alle Dateien und klicken Sie auf die Schaltfläche Speichern.
Arbeiten Sie mit jeder Art von Konto (Administrator oder Standardbenutzer), führen Sie es einfach aus! In diesem Beispiel verwende ich eine temporäre Variable, aber Sie können jede andere verwenden! p.s. Nur für Windows!
So löschen Sie eine Datei:
del PATH_TO_FILE
So löschen Sie einen Ordner mit allen darin enthaltenen Dateien:
rmdir /s /q PATH_TO_FOLDER
Das Löschen aller Dateien aus einem bestimmten Ordner (nicht das Löschen des Ordners selbst) ist etwas kompliziert. del /s *.*
kann keine Ordner löschen, entfernt jedoch Dateien aus allen Unterordnern. Es werden also zwei Befehle benötigt:
del /q PATH_TO_FOLDER\*.*
for /d %i in (PATH_TO_FOLDER\*.*) do @rmdir /s /q "%i"
Ich habe mehrere dieser Ansätze ausprobiert, aber keiner hat richtig funktioniert.
Ich habe diesen zweistufigen Ansatz vor Ort gefunden Windows Command Line :
forfiles /P %pathtofolder% /M * /C "cmd /c if @isdir==FALSE del @file"
forfiles /P %pathtofolder% /M * /C "cmd /c if @isdir==TRUE rmdir /S /Q @file"
Es hat genau so funktioniert, wie ich es brauchte und wie es vom OP spezifiziert wurde.
@ECHO OFF
rem next line removes all files in temp folder
DEL /A /F /Q /S "%temp%\*.*"
rem next line cleans up the folder's content
FOR /D %%p IN ("%temp%\*.*") DO RD "%%p" /S /Q