Wie kann ich alle Dateien / Unterordner in einem bestimmten Ordner über die Eingabeaufforderung löschen?

42

Ich möchte alle Dateien und Unterordner in einer Batch-Datei in Windows 7 löschen und den obersten Ordner behalten. Grundsätzlich den Ordner leeren. Was ist die Befehlszeilenanweisung dafür?

Tony_Henrich
quelle
3
Nicht zu nitpicken, aber Sie suchen, wie Sie dies tun "an der Eingabeaufforderung" nicht von "DOS". Seit Win ME gibt es kein DOS-Subsystem mehr.
MDMarra
@MarkM: Nun, es gibt / gab, ntvdmaber wenn 64-Bit-Systeme Marktanteile gewinnen, wird es zunehmend irrelevant.
Joey

Antworten:

55

Sie können dies mit delund dem /SFlag tun (um anzugeben, dass alle Dateien aus allen Unterverzeichnissen entfernt werden sollen):

del /S C:\Path\to\directory\*
MDMarra
quelle
2
deins ist besser: D +1 - Gelöschte meine Antwort
BloodPhilia
3
Erklärung: del steht für Delete und S für Recursive.
Tamara Wijsman
3
@ Tony_Henrich, Weitere Informationen zu msdos-Befehlen finden Sie hier. computerhope.com/msdos.htm
Moab
3
und die Verwendung von / Q hält leere Unterordner, was unerwünscht ist.
Tony_Henrich
3
Dies ist die falsche Antwort und ich weiß nicht, warum es viele Gegenstimmen gab. Es scheint, dass die Leute die Frage nicht vollständig verstanden haben und keine Kommentare lesen! Ich werde die Antworten durchgehen und die richtige auswählen.
Tony_Henrich
22

Die beste Lösung: Ich möchte zB alle Dateien und Unterverzeichnisse des übergeordneten Verzeichnisses löschen. Sagen wir "C: \ Users \ Desktop \ New folder \". Der einfache Weg ist die Erstellung einer Batch-Datei mit drei Befehlen.

cd C: \ Benutzer \ Desktop \ Neuer Ordner \

del * / S / Q

rmdir / S / Q "C: \ Benutzer \ Desktop \ Neuer Ordner \"

Hier werden zuerst alle Dateien in allen Unterverzeichnissen und dann alle leeren Unterverzeichnisse gelöscht. Da das aktuelle Arbeitsverzeichnis das übergeordnete Verzeichnis ist, dh "\ Neuer Ordner", kann der Befehl rmdir dieses Verzeichnis nicht selbst löschen.

Annasaheb
quelle
1
Funktioniert sehr gut, mit Ausnahme einer Warnung, wenn das System den Stammordner nicht löschen kann.
Jerther
2
Nicht gut. Fest codierte Pfade und beim Betrachten wird der Ordner nicht geleert. Es entfernt es. Sehr gefährlich auch. Es löscht Dateien im aktuellen Ordner, wenn der Pfad nicht beendet oder falsch geschrieben wird.
Tony_Henrich
1
Wie @Tony_Henrich sagte, wird der rmdirBefehl gelöschtNew folder
Nuktu
Nein. Dies funktioniert tatsächlich beim vollständigen Löschen des "Neuen Ordners", ohne den Ordner selbst zu löschen. Das einzige Problem ist, dass eine kleine Warnung ausgegeben wird, wenn das Betriebssystem den übergeordneten Ordner nicht löschen kann. Außerdem ist der Befehl del redundant, es sei denn, Sie haben einen großen Ordner. In diesem Fall ist er möglicherweise schneller. Sie können es einfach als solches ändern (Entschuldigen Sie das Fehlen von Zeilenumbrüchen in Kommentaren): set FOLDER = "% userprofile% \ Desktop \ Neuer Ordner" cd% FOLDER% rmdir / S / Q% FOLDER% \> nul 2> & 1
HSuke
3
Wirklich gefährlich. Wenn jemand vorgeht und den Ordner "C: \ Users \ Desktop \ New" entfernt / umbenennt, schlägt die allererste Zeile mit der CD fehl und Ihre Batch-Datei löscht glücklich alles im aktuellen (Standard-) Verzeichnis. Das könnte sehr gut Ihr Arbeitsverzeichnis sein oder C: \ Windows \ System32
Ishmaeel
9

Navigieren Sie zum übergeordneten Verzeichnis:

pushd "Parent Directory"

Löschen Sie die Unterordner:

rd /s /q . 2>nul
user340956
quelle
1
Wow, das ist hackisch. :)
Tarnay Kálmán
1
Dies entspricht im Wesentlichen zwei vorherigen Antworten.
Scott
Einverstanden mit oben - Dies ist eine Kopie der vorherigen Antworten, die durch Befehle ersetzt wurden, die auch denen entsprechen, die sie ersetzen. pushdfügt hier nichts hinzu, was noch nicht erledigt cdist.
Hashim
Dies ist die einzige, die ich bisher verwenden konnte, die genau für das funktionierte, was der Fragesteller fragte. Alle anderen löschen einfach alle Dateien. Natürlich rmdir /s path-to-folderwird der Ordner mit all dem Zeug darin gelöscht, aber der Fragesteller wollte wissen, wie man alles im Arbeitsverzeichnis löscht.
Katz_Katz_Katz
Diese Antwort hat am besten für mich funktioniert. Bei allen anderen Antworten wurden nicht leere Verzeichnisse nicht gelöscht, wenn / Q verwendet wurde, und es wurde immer um Bestätigung gebeten, wenn / Q nicht verwendet wurde.
Marijnr
5
rmdir "c:\pathofyourdirectory" /q /s

Vergessen Sie nicht, die Anführungszeichen zu verwenden. /q /sDadurch werden alle Repositorys gelöscht, ohne dass Sie dazu aufgefordert werden.

SuperUser
quelle
2
Die Frage war "Ich möchte alle Dateien und Unterordner in einer Batch-Datei in Windows 7 löschen und den obersten Ordner behalten. "
Werner Henze
5

Mit rmdir können Sie die Dateien und Unterordner wie folgt löschen:

rmdir /s/q MyFolderPath

Es ist jedoch wesentlich schneller, insbesondere wenn Sie viele Unterordner in Ihrer Struktur haben, um del vor dem rmdir zu verwenden, wie folgt:

del /f/s/q MyFolderPath > nul
rmdir /s/q MyFolderPath
Einbert Alshtein
quelle
Erste Option gibt einen Fehler "das Verzeichnis ist nicht leer". Der erste Befehl in der zweiten Option löscht den gesamten Ordner. Es bleibt nicht so, wie ich es wollte. Der zweite Befehl wird nicht benötigt, wenn der erste Befehl den gesamten Ordner gelöscht hat.
Tony_Henrich
Der rmdirBefehl (beide sind gleich) löscht den übergeordneten Ordner. Dies ist keine Antwort auf die Frage. Warum lesen die Leute nicht?
Hashim
3

Wenn Sie alle Dateien in einem Ordner löschen möchten, einschließlich aller Unterordner, und sich nicht auf einige Fehlerbedingungen verlassen möchten, um den Stammordner intakt zu halten (wie ich in einer anderen Antwort gesehen habe), könnten Sie eine Batch-Datei wie die folgende haben:

@echo off

REM Checking for command line parameter
if "%~1"=="" (

    echo Parameter required.
    exit /b 1

) else (

    REM Change directory and keep track of the previous one
    pushd "%~1"

    if errorlevel 1 (

        REM The directory passed from command line is not valid, stop here.
        exit /b %errorlevel%

    ) else (

        REM First we delete all files, including the ones in the subdirs, without confirmation
        del * /S /Q

        REM Then we delete all the empty subdirs that were left behind
        for /f %%D IN ('dir /b /s /a:d "%~1"') DO rmdir /S /Q "%%D"

        REM Change directory back to the previous one
        popd

        REM All good.
        exit /b 0
    )

)

Und dann würden Sie es einfach so nennen:

empty_my_folder.bat "C:\whatever\is\my folder"
Gio
quelle
3

Sie können dies schnell und einfach tun, indem Sie diese drei Anweisungen in Ihre Fledermausdatei einfügen:

mkdir empty_folder
robocopy /mir empty_folder "path_to_directory"
rmdir empty_folder
Feuerblut
quelle
Dies ist immens nützlich, da dadurch auch alle versteckten oder Systemdateien entfernt werden.
Schwachpunkt
1

Dies funktionierte besser für mich, als ich Leerzeichen in den Ordnernamen hatte.

@echo off
REM ---- Batch file to clean out a folder
REM Checking for command line parameter
if "%~1"=="" (

echo Parameter required.
exit /b 1

) else (
echo ***********************************************************************************
    echo *** Deleting all files, including the ones in the subdirs, without confirmation *** 
    del "%~1\*" /S /Q
echo ***********************************************************************************
    REM Deleting all the empty subdirs that were left behind
FOR /R "%~1" %%D IN (.) DO (
    if "%%D"=="%~1\."  (
    echo *** Cleaning out folder: %~1 *** 
    ) else (
    echo Removed folder "%%D"
    rmdir /S /Q "%%D"
    )
) 

    REM All good.
    exit /b 0

)
Ed Hammond
quelle
Die Leute vergessen immer, Leerzeichen in den Namen zu haben.
Kevin Panko
1

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 *.*Ordner können nicht gelöscht werden, es werden jedoch Dateien aus allen Unterordnern entfernt. Es werden also zwei Befehle benötigt:

del /q PATH_TO_FOLDER\*.*
for /d %i in (PATH_TO_FOLDER\*.*) do @rmdir /s /q "%i"

Sie können ein Skript erstellen, um beliebige Elemente (Ordner oder Datei) wie folgt zu löschen mydel.bat:

@echo off
setlocal enableextensions

if "%~1"=="" (
    echo Usage: %0 path
    exit /b 1
)

:: check whether it is folder or file
set ISDIR=0
set ATTR=%~a1
set DIRATTR=%ATTR:~0,1%
if /i "%DIRATTR%"=="d" set ISDIR=1

:: Delete folder or file
if %ISDIR%==1 (rmdir /s /q "%~1") else (del "%~1")
exit /b %ERRORLEVEL%

Einige Anwendungsbeispiele:

mydel.bat "path\to\folder with spaces"
mydel.bat path\to\file_or_folder
Maxim Suslov
quelle
0

Das hat bei mir funktioniert.

  1. Navigieren Sie in den Ordner, in dem Sie die Dateien löschen möchten.
  2. Art: del *
  3. Y für ja.
  4. Getan
Erv
quelle