2010-08-09 16:42:36 +0000 2010-08-09 16:42:36 +0000
43
43

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

Ich möchte alle Dateien und Unterordner in einer Batch-Datei in Windows 7 löschen und den obersten Ordner behalten. Der Ordner soll grundsätzlich geleert werden. Wie lautet die Befehlszeilenanweisung dafür?

Antworten (11)

54
54
54
2010-08-09 16:46:23 +0000

Sie können dies mit del und dem Flag /S tun (um ihm mitzuteilen, dass er alle Dateien aus allen Unterverzeichnissen entfernen soll):

del /S C:\Path\to\directory\*
23
23
23
2013-10-05 04:44:01 +0000

Die beste Lösung: ich möchte z.B. alle Dateien und Unterverzeichnisse des übergeordneten Verzeichnisses löschen, sagen wir “C:\Benutzer\Desktop\Neuer Ordner\”. Der einfache Weg ist die Erstellung einer Batch-Datei mit den folgenden drei Befehlen:

cd C:\Users\Desktop\Neuer Ordner\

del * /S /Q

rmdir /S /Q “C:\Users\Desktop\Neuer Ordner\”

Hier werden zuerst alle Dateien in allen Unterverzeichnissen und dann alle leeren Unterverzeichnisse bereinigt. Da das aktuelle Arbeitsverzeichnis ein übergeordnetes Verzeichnis ist, d.h. “\Neuer Ordner”, kann der Befehl rmdir dieses Verzeichnis nicht selbst löschen.

9
9
9
2014-07-03 12:38:29 +0000

Navigieren Sie zum übergeordneten Verzeichnis:

pushd "Parent Directory"

Löschen Sie die Unterordner:

rd /s /q . 2>nul
6
6
6
2015-04-27 07:21:36 +0000

Sie können rmdir verwenden, um die Dateien und Unterordner zu löschen, etwa so:

rmdir /s/q MyFolderPath

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

del /f/s/q MyFolderPath > nul
rmdir /s/q MyFolderPath
5
5
5
2013-07-31 18:23:00 +0000
rmdir "c:\pathofyourdirectory" /q /s

Vergessen Sie nicht, die Anführungszeichen zu verwenden, und für die /q /s werden alle Repositories gelöscht, und zwar ohne Rückfrage.

3
3
3
2014-02-05 16:39:49 +0000

Wenn Sie alle Dateien in einem Ordner einschließlich aller Unterordner löschen möchten und sich nicht auf einige Fehlerbedingungen verlassen wollen, um den Stammordner intakt zu halten (wie ich in einer anderen Antwort gesehen habe), könnten Sie eine Batch-Datei wie diese 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 sie einfach mit:

empty_my_folder.bat "C:\whatever\is\my folder"
``` aufrufen
3
3
3
2017-02-02 19:20:53 +0000

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
1
1
1
2016-11-10 17:16:53 +0000

Zum Löschen einer Datei:

del PATH_TO_FILE

Zum Löschen eines Ordners mit allen Dateien:

rmdir /s /q PATH_TO_FOLDER

Das Löschen aller Dateien aus einem bestimmten Ordner (nicht aus dem Ordner selbst) ist etwas kompliziert. del /s *.* kann keine Ordner löschen, sondern entfernt Dateien aus allen Unterordnern. Daher werden 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 zu löschen, was immer Sie wollen (Ordner oder Datei), wie dieses 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%

Wenige Anwendungsbeispiele:

mydel.bat "path\to\folder with spaces"
mydel.bat path\to\file_or_folder
1
1
1
2014-02-13 18:06:34 +0000

Dies funktionierte für mich besser, wenn 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

)
0
0
0
2020-02-17 22:41:30 +0000

user340956 war der Lösung schmerzlich nahe, aber Sie wissen ja, was man über Nähe sagt…

Um es klar zu sagen, rd /s /q c:\foobar löscht das Zielverzeichnis zusätzlich zu seinem Inhalt, aber Sie wollen nicht immer das Verzeichnis selbst löschen, manchmal wollen Sie nur seinen Inhalt löschen und das Verzeichnis in Ruhe lassen. Der Befehl deltree könnte dies tun, aber Micrsoft hat in seiner unendlichen “Weisheit” den Befehl entfernt und ihn nicht auf Windows portiert.

Hier ist eine Lösung, die ohne Rückgriff auf Tools von Drittanbietern funktioniert. Sie ist wahrscheinlich so einfach und effizient, wie es mit einem Befehlszeilen-Skript möglich ist, anstatt direkt ein ausführbares Programm zu schreiben. Es setzt keine Umgebungsvariablen und verwendet keine Schleifen. Es ist auch so sicher wie möglich, mit Fehlerüberprüfung überall möglich, und auch so benutzerfreundlich wie möglich, mit eingebauten Dokumenten:

dt.bat (oder dt.cmd für die Kinder; was auch immer, ich bin alt, ich benutze .bat ):

:: dt is a Windows-compatible version of the deltree command
:: Posted to SuperUser by Synetech: https://superuser.com/a/1526232/3279

@echo off
goto start

:start
    if ["%~1"]==[""] goto usage
    pushd "%~1" 2>nul
    if /i not ["%cd%"]==["%~1"] goto wrongdir
    rd /s /q "%~1" 2>nul
    popd
goto :eof

:usage
    echo Delete all of the contents of a directory
    echo.
    echo ^> %0 DIR
    echo.
    echo %0 is a substitute for deltree, it recursively deletes the contents
    echo (files and folders) of a directory, but not the directory itself
    echo.
    echo DIR is the directory whose contents are to be deleted
goto :eof

:wrongdir
    echo Could not change to the target directory. Invalid directory? Access denied?
goto :eof

So funktioniert es:

  1. es prüft, ob ein Kommandozeilenargument übergeben wurde, und gibt Nutzungsinformationen aus und beendet sich, wenn nicht.
  2. Es benutzt pushd, um das aktuelle Verzeichnis zu speichern, dann zum Zielverzeichnis zu wechseln und alle Fehler nach nul umzuleiten, um eine sauberere Kommandozeilenerfahrung (und sauberere Protokolle) zu erhalten.
  3. Es prüft, ob das aktuelle Verzeichnis jetzt mit dem Zielverzeichnis übereinstimmt, gibt eine Fehlermeldung aus und beendet sich, wenn dies nicht der Fall ist. Dadurch wird verhindert, dass der Inhalt des vorherigen Verzeichnisses versehentlich gelöscht wird, wenn der Befehl pushd fehlgeschlagen ist (z.B, Übergeben eines ungültigen Verzeichnisses, Zugriffsfehler usw.)
  4. Diese Prüfung unterscheidet nicht zwischen Groß- und Kleinschreibung, so dass sie unter Windows üblicherweise sicher ist, aber nicht für Dateisysteme, die Groß- und Kleinschreibung unterscheiden, wie sie von *nix-Systemen verwendet werden, selbst unter Windows.
  5. Sie funktioniert nicht mit kurzen Dateinamen (z.B. wird C:\Users\Bob Bobson\foobar nicht als dasselbe wie C:\Users\BobBob~1\foobar angesehen, selbst wenn sie es tatsächlich sind). Es ist eine kleine Unannehmlichkeit, den nicht-kurzen Dateinamen verwenden zu müssen, aber es ist besser auf Nummer sicher zu gehen, besonders da SFNs nicht völlig zuverlässig oder immer vorhersehbar sind (und vielleicht sogar ganz deaktiviert werden können).
  6. es benutzt dann rd, um das Zielverzeichnis und seinen gesamten Inhalt zu löschen und leitet alle Fehler (die es mindestens einen für das Verzeichnis selbst geben sollte) nach nul um. Einige Anmerkungen dazu:
  7. Da das Zielverzeichnis das aktuelle Verzeichnis ist, hat das System einen offenen Datei-Handle für dieses Verzeichnis und kann es daher nicht tatsächlich löschen, sondern bleibt so, wie es ist, was das gewünschte Verhalten ist.
  8. Da es erst versucht, das Zielverzeichnis zu entfernen, nachdem sein Inhalt entfernt wurde, sollte es jetzt leer sein (anders als alles, was ebenfalls offene Datei-Handles hat).
  9. Schließlich kehrt es mit popd zum vorher aktuellen Verzeichnis zurück und beendet das Skript.

(Wenn Sie möchten, können Sie das Skript mit den obigen Beschreibungen mit rem oder :: kommentieren).

0
0
0
2018-05-07 18:43:18 +0000

Das hat bei mir funktioniert.

  1. Navigieren Sie in dem Ordner, in dem Sie die Dateien löschen möchten.
  2. Geben Sie ein: del *
  3. Y für ja.
  4. Geschafft