Batch-Datei. Löschen Sie alle Dateien und Ordner in einem Verzeichnis

135

Ich möchte eine Batch-Datei haben, die alle Ordner und Dateien in meinem Cache-Ordner für mein drahtloses Toolkit löscht.

Derzeit habe ich Folgendes:

cd "C:\Users\tbrollo\j2mewtk\2.5.2\appdb\RMS"
del *.db

Dadurch werden alle DB-Dateien in meinem RMS- Verzeichnis gelöscht. Ich möchte jedoch alle Elemente aus diesem Verzeichnis löschen. Wie kann ich das machen?

user69514
quelle
3
Geben Sie del /?an der Eingabeaufforderung ein. Sie erhalten Informationen zur Verwendung des Tools. In diesem Fall del *.* /swürde es funktionieren, aber nicht im falschen Verzeichnis!
Michael Todd
35
rmdir /s /q c:\users\tbrollo\j2mewtk\2.5.2\appdb\RMS
Forsvarir
Ich würde pro Up-Stimmen vorschlagen, die richtige Antwort zu ändern
GregM
5
Die Antwort von forsvarir entfernt auch das RMSVerzeichnis, was möglicherweise nicht beabsichtigt war. (Tatsächlich ist es oft das, was ich nicht will, weil ich dann den ursprünglichen Zeitstempel des Verzeichnisses und alle Berechtigungen, die es hatte, verliere.) In meiner Antwort erfahren Sie, wie Sie den gesamten Inhalt eines Verzeichnisses entfernen, aber das Verzeichnis selbst belassen Ort.
Bill_Stewart

Antworten:

52

del *.*statt del *.db. Das wird alles entfernen.

Jon Martin
quelle
56
Hinweis: Wenn Sie die Eingabeaufforderung "Sind Sie sicher, dass Sie löschen möchten ..." umgehen möchten, müssen Sie / FQ-Flags hinzufügen:del . /F /Q
Rhyuk
40
Dies entfernt nur Dateien - keine Ordner
icc97
52
Dies sollte nicht als die richtige Antwort markiert werden, da keine Ordner gelöscht werden (wie in der Frage angegeben).
Bill_Stewart
158

Verwenden:

  • Erstellen Sie eine Batchdatei

  • Kopieren Sie den folgenden Text in die Batch-Datei

    set folder="C:\test"
    cd /d %folder%
    for /F "delims=" %%i in ('dir /b') do (rmdir "%%i" /s/q || del "%%i" /s/q)
    

Es werden alle Dateien und Ordner gelöscht .

GregM
quelle
4
Genial, ich war auf der Suche nach etwas, um Dateien und Ordner für einen monatlichen Stapeljob zu bereinigen, und das hat den Trick getan.
Dave Harding
9
Stellen Sie sicher, dass das Verzeichnis vorhanden ist, bevor Sie dies tun.
Bill_Stewart
2
Wenn Ihre Dateinamen Sonderzeichen enthalten chcp 10000, ändern Sie zunächst die Codierung in UTF-16
Demelziraptor
3
Ich möchte dem Kommentar von Bill_Stewart nur eine Notiz hinzufügen. Der Grund, warum Sie sicherstellen möchten, dass das Verzeichnis vorhanden ist, besteht darin, dass ansonsten das Verzeichnis gelöscht wird, in dem Sie sich gerade befinden. In meinem Fall war es die Batchdatei, an der ich über 30 Minuten gearbeitet habe. :( Gut, dass der Rest des Ordners unter Quellcodeverwaltung war.
helios456
2
@vee ändern Sie die Schleife, (rmdir "%%i" /s/q 2>NUL || del "%%i" /s/q >NUL ) um die Fehler- und Löschmeldungen zu unterdrücken
Carl Walsh
34
IF EXIST "C:\Users\tbrollo\j2mewtk\2.5.2\appdb\RMS" (
    rmdir "C:\Users\tbrollo\j2mewtk\2.5.2\appdb\RMS" /s /q
)

Dadurch wird alles aus dem Ordner (und dem Ordner selbst) gelöscht.

infojolt
quelle
13
Ich denke, die Frage ist, das Verzeichnis aller Inhalte zu leeren, aber nicht das Verzeichnis selbst zu löschen.
Bill_Stewart
16

del *.*löscht nur Dateien, aber keine Unterverzeichnisse. Um den Inhalt eines Verzeichnisses zu zerstören, können Sie dieses Skript verwenden:

@echo off
setlocal enableextensions
if {%1}=={} goto :HELP
if {%1}=={/?} goto :HELP
goto :START

:HELP
echo Usage: %~n0 directory-name
echo.
echo Empties the contents of the specified directory,
echo WITHOUT CONFIRMATION. USE EXTREME CAUTION!
goto :DONE

:START
pushd %1 || goto :DONE
rd /q /s . 2> NUL
popd

:DONE
endlocal

Die pushdÄnderungen in dem Verzeichnis, in dem Sie die untergeordneten Elemente löschen möchten. Wenn Sie dann rdaufgefordert werden, das aktuelle Verzeichnis und alle Unterverzeichnisse zu löschen, ist das Löschen der Unterverzeichnisse erfolgreich, aber das Löschen des aktuellen Verzeichnisses schlägt fehl - weil wir uns darin befinden. Dies erzeugt einen Fehler, der 2> NULverschluckt. (2 ist der Fehlerstrom).

Bill_Stewart
quelle
6
Ich habe mir ein wenig überlegt, wie das ein bisschen funktioniert, als Erklärung für andere: Der Pushd wechselt in das Verzeichnis, in dem Sie die Kinder löschen möchten. Wenn rd dann nach dem Löschen des aktuellen Verzeichnisses und aller Unterverzeichnisse fragt, ist das Löschen der Unterverzeichnisse erfolgreich, aber das Löschen des aktuellen Verzeichnisses schlägt fehl - weil wir uns darin befinden. Dies erzeugt einen Fehler, den 2> NUL verschluckt. (2 ist der Fehlerstrom). Sehr gerissener Herr Stewart!
Kinetic
Oh, und "setlocal enableextensions" aktiviert die Möglichkeit, das aktuelle Verzeichnis gleichzeitig auf den Stapel zu verschieben und das Verzeichnis zu wechseln. Dies scheint nur vor XP erforderlich zu sein, da es dort und später sowieso standardmäßig Ein ist.
Kinetic
Können Sie die Informationen aus Kommentaren in die Antwort integrieren (Kommentare können jederzeit verschwinden)? ( Ohne Verwendung von "Edit:" "Update:" Etikett .)
Peter Mortensen
12

Ich habe das gerade aus dem zusammengestellt, was morty346 gepostet hat:

set folder="C:\test"
IF EXIST "%folder%" (
    cd /d %folder%
    for /F "delims=" %%i in ('dir /b') do (rmdir "%%i" /s/q || del "%%i" /s/q)
)

Es wird eine schnelle Überprüfung hinzugefügt, ob der in der Variablen definierte Ordner zuerst vorhanden ist, das Verzeichnis in den Ordner geändert und der Inhalt gelöscht.

Fantus_Longhorn
quelle
2
Schneller Tipp: Wenn Sie versuchen, dies auf einem Netzwerkpfad auszuführen, kann der Ordner trotz der Anweisung "IF EXIST" nicht festgelegt werden, und eine Anweisung wird in der cmd-Eingabeaufforderung "UNC-Pfade werden nicht unterstützt, standardmäßig" aufgezeichnet Windows-Verzeichnis "dann wird versucht, alles in Ihrem Windows-Verzeichnis zu löschen. Also sei vorsichtig.
CBRF23
11

Sie können dies mit delund dem /SFlag tun (um anzuweisen, alle Dateien aus allen Unterverzeichnissen zu rekursieren):

del /S C:\Path\to\directory\*

Der Befehl RD kann ebenfalls verwendet werden. Rekursiv leise ohne Aufforderung löschen:

@RD /S /Q %VAR_PATH%

Rmdir (rd)

PodTech.io
quelle
5
set "DIR_TO_DELETE=your_path_to_the_folder"

IF EXIST %DIR_TO_DELETE% (
    FOR /D %%p IN ("%DIR_TO_DELETE%\*.*") DO rmdir "%%p" /S /Q
    del %DIR_TO_DELETE%\*.* /F /Q
)
Cristian Tetic
quelle
3

Versuche Folgendes; Für mich geht das.

Ich habe eine Anwendung, die Daten in meinem Ordner "C: \ tmp" speichert, und das Folgende funktioniert am besten für mich. Es werden nicht einmal Ja oder Nein gefragt , um die Daten zu löschen. Ich habe einen Zeitplan erstellt, der alle 5 Minuten ausgeführt werden soll

cd "C:\tmp"

del *.* /Q
Poorvesh
quelle
7
Wenn der Ordner "C: \ tmp" nicht vorhanden ist (wenn Sie oder eine andere Anwendung diesen Ordner gelöscht haben) und wenn Sie versuchen, diesen auszuführen, werden dann nicht die Daten aus einem anderen Ordner in "C: \" gelöscht? (Es ist mit mir passiert)
Vikram
4
Wie Vikram bemerkt: 1) Dies ist sehr gefährlich und 2) es entfernt keine Unterverzeichnisse, wie in der Frage angegeben.
Bill_Stewart
2
Zusätzlich zu den Ordnern können Sie einfach etwas tun del /q c:\tmp\*.*, was ungefähr eine Million Mal sicherer ist. Ganz zu schweigen cddavon, dass nur der Pfad geändert wird, nicht das Laufwerk.
Nyerguds
1
Das ist ein schrecklicher Rat. Wie andere bereits erwähnt haben, können Sie dadurch so viele wichtige Daten löschen. Zum Entfernen markiert Ich denke, es ist so schlimm.
RyanfaeScotland
2

Besser noch, sagen wir, ich möchte alles unter dem C:\windows\tempOrdner entfernen .

@echo off
rd C:\windows\temp /s /q
user3788752
quelle
11
Das entfernt das Verzeichnis c:\windows\temp. Ich glaube nicht, dass dies die ursprüngliche Frage war.
Bill_Stewart
Das Entfernen des Verzeichnisses scheint mir am einfachsten zu sein, und wenn ich es später neu erstellen muss, kann ich es. Ein Problem könnte der Verlust spezieller Ordnerberechtigungen sein. Dies scheint jedoch viel einfacher zu sein als die meisten anderen Antworten.
Madannes
1
Leider scheint das Löschen und sofortige erneute
Erstellen
2

Sie können Robocopy verwenden, um einen leeren Ordner in den Ordner zu spiegeln, den Sie löschen.

robocopy "C:\temp\empty" "C:\temp\target" /E /MIR

Es funktioniert auch, wenn Sie den eigentlichen Ordner nicht entfernen oder neu erstellen können.

Es ist ein vorhandenes leeres Verzeichnis erforderlich.

Aaron
quelle
1
Laut Hilfe von Robocopy /MIR :: MIRror a directory tree (equivalent to /E plus /PURGE).bin ich mir also ziemlich sicher, dass /Edas überflüssig ist.
Nyerguds
2

Verwenden

set dir="Your Folder Path Here"
rmdir /s %dir%
mkdir %dir%

Diese Version wird gelöscht, ohne zu fragen:

set dir="Your Folder Here"
rmdir /s /q %dir%
mkdir %dir%

Beispiel:

set dir="C:\foo1\foo\foo\foo3"
rmdir /s /q %dir%
mkdir %dir%

Dies wird klar C:\foo1\foo\foo\foo3.

(Ich möchte die Antwort von Abdullah Sabouin erwähnen . Es gab eine Verwechslung damit, dass ich ihn kopiert habe. Ich habe seinen Beitrag nicht bemerkt. Ich möchte Melpomene dafür danken, dass er auf Fehler hingewiesen hat!)

TravieDude Minecraft und mehr
quelle
Das funktioniert überhaupt nicht. rmdir fooFehler aus, wenn fookein leeres Verzeichnis ist.
Melpomene
@melpomene Ich habe den Fehler gefunden und er sollte behoben sein !!
TravieDude Minecraft und mehr
1
Ich wollte @Abdullah Sabouni in keiner Weise kopieren. Ich muss das nicht bemerkt haben. Es tut mir Leid.
TravieDude Minecraft und mehr
@melpomene Ich habe meinen Fehler und meinen Standpunkt zu dem, was passiert ist, angegeben. Aber ich habe beschlossen, nicht zu löschen, falls es trotzdem hilft. Vielen Dank für den Hinweis.
TravieDude Minecraft und mehr
@TravieDudeMinecraftandMore +1 - hat auch für mich funktioniert.
Guy Avraham
0

Sie können nicht alles entweder rmdiroder delalleine löschen :

  • rmdir /s /qakzeptiert keine Platzhalterparameter. Also rmdir /s /q *wird Fehler.
  • del /s /f /q löscht alle Dateien, aber leere Unterverzeichnisse bleiben erhalten.

Meine bevorzugte Lösung (wie ich sie in vielen anderen Batch-Dateien verwendet habe) ist:

rmdir /s /q . 2>NUL
Butfly
quelle
0

Nur eine modifizierte Version von GregMs Antwort :

set folder="C:\test"
cd /D %folder%
if NOT %errorlevel% == 0 (exit /b 1)
echo Entire content of %cd% will be deleted. Press Ctrl-C to abort
pause

REM First the directories /ad option of dir
for /F "delims=" %%i in ('dir /b /ad') do (echo rmdir "%%i" /s/q)

REM Now the files /a-d option of dir
for /F "delims=" %%i in ('dir /b /a-d') do (echo del "%%i" /q)

REM To deactivate simulation mode remove the word 'echo' before 'rmdir' and 'del'.
Grenix
quelle
-1
@echo off
@color 0A

echo Deleting logs

rmdir /S/Q c:\log\

ping 1.1.1.1 -n 5 -w 1000 > nul

echo Adding log folder back

md c:\log\

Sie waren auf dem richtigen Weg. Fügen Sie einfach Code hinzu, um den Ordner hinzuzufügen, der wieder gelöscht wird.

Abdullah Sabouni
quelle
1
Ich empfehle diese Lösung nicht, da sie das Verzeichnis entfernt (wodurch ihre Berechtigungen verloren gehen) und neu erstellt wird (möglicherweise mit unterschiedlichen Berechtigungen).
Bill_Stewart
-3

Sie sollten diesen Befehl ausführen, um alle Dateien zu löschen:

del*.*
David Naranjo Hernandez
quelle
6
das gleiche wie die akzeptierte Antwort vom 26. Juli 11 um 21:04 Uhr. Bitte fügen Sie keine Antwort hinzu, wenn Sie nichts Neues haben.
Stephan
2
Zusätzlich zu der gültigen Kritik von @Stephan muss der Befehl del *.*(mit einem Leerzeichen) sein
Ty Hitzeman