Jak mogę usunąć wszystkie pliki / podfoldery z danego folderu za pomocą wiersza polecenia?


42

Chciałbym usunąć wszystkie pliki i podfoldery z pliku wsadowego w systemie Windows 7 i zachować górny folder. Zasadniczo opróżnianie folderu. Jaka jest w tym celu instrukcja wiersza poleceń?


3
Nie próbuj tego robić, ale szukasz sposobu, jak to zrobić „z wiersza polecenia”, a nie z „DOS”. Od Win Win ME nie było podsystemu DOS.
MDMarra,

@MarkM: Cóż, istnieje / było, ntvdmale w miarę jak systemy 64-bitowe zdobywają udział w rynku, staje się coraz bardziej nieistotne.
Joey,

Odpowiedzi:


55

Możesz to zrobić za pomocą deli /Sflagi (aby nakazać mu usunięcie wszystkich plików ze wszystkich podkatalogów):

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

2
Twoja jest lepsza: D +1 - Usunąłem moją odpowiedź
BloodPhilia

3
Objaśnienie: del oznacza Delete, a S oznacza Recursive.
Tamara Wijsman,

3
@ Tony_Henrich, Dowiedz się więcej o komendach msdos tutaj. computerhope.com/msdos.htm
Moab

3
a użycie / Q utrzymuje puste podfoldery, co jest niepożądane.
Tony_Henrich,

3
To zła odpowiedź i nie wiem, dlaczego otrzymała wiele głosów. Wygląda na to, że ludzie nie rozumieli pytania w pełni i nie czytają komentarzy! Przejdę przez odpowiedzi i wybiorę poprawną.
Tony_Henrich

22

Najlepsze rozwiązanie: np. Chcę usunąć wszystkie pliki i podkatalogi katalogu nadrzędnego, powiedzmy „C: \ Users \ Desktop \ New folder \”. Prostym sposobem jest utworzenie pliku wsadowego zawierającego poniżej trzy polecenia.

cd C: \ Users \ Desktop \ New folder \

del * / S / Q

rmdir / S / Q "C: \ Users \ Desktop \ New folder \"

Tutaj najpierw wyczyści wszystkie pliki we wszystkich podkatalogach, a następnie wyczyści wszystkie puste podkatalogi. Ponieważ bieżący katalog roboczy jest katalogiem nadrzędnym, tj. „\ Nowy folder”, komenda rmdir nie może usunąć samego katalogu.


1
Działa bardzo dobrze, z wyjątkiem ostrzeżenia, gdy system nie może usunąć folderu głównego.
Jerther,

2
Niedobrze. Ścieżki zakodowane na stałe i patrząc na nie, nie opróżnia folderu. Usuwa to. Bardzo niebezpieczne również. Usuwa pliki w bieżącym folderze, jeśli ścieżka nie wychodzi lub jest błędnie zapisana.
Tony_Henrich

1
Jak powiedział @Tony_Henrich, rmdirpolecenie zostanie usunięteNew folder
Nuktu

Nie. To faktycznie działa w celu całkowitego wyczyszczenia „Nowego folderu” bez usuwania samego folderu. Jedynym problemem jest to, że daje niewielkie ostrzeżenie, gdy system operacyjny nie usunie folderu nadrzędnego. Ponadto polecenie del jest zbędne, chyba że masz duży folder, w takim przypadku może być szybszy. Możesz po prostu zmodyfikować go jako taki (Przepraszamy za brak podziałów linii w komentarzach): ustaw FOLDER = "% userprofile% \ Desktop \ New folder" cd% FOLDER% rmdir / S / Q% FOLDER% \> nul 2> & 1
HSuke

3
Naprawdę niebezpieczne. Jeśli ktoś pójdzie naprzód i usunie / zmieni nazwę `C: \ Users \ Desktop \ New folder`, pierwsza linia z CD zawiedzie, a plik wsadowy z radością usuwa wszystko z bieżącego (domyślnego) katalogu. Który może bardzo skończyć jako katalog roboczy lub C: \ Windows \ System32
Ishmaeel

9

Przejdź do katalogu nadrzędnego:

pushd "Parent Directory"

Usuń podfoldery:

rd /s /q . 2>nul

1
Wow, to jest hackish. :)
Tarnay Kálmán

1
Jest to zasadniczo równoważne z dwiema poprzednimi odpowiedziami.
Scott

Zgadzam się z powyższym - jest to kopia poprzednich odpowiedzi, zastąpionych poleceniami będącymi synonimami tych, które zastępują. pushdnie dodaje tutaj niczego, co jeszcze cdnie działa.
Hashim

jest to jedyny do tej pory, którego mogłem użyć, który działał dokładnie tak, jak pytał pytający, wszystkie pozostałe po prostu usuwają wszystkie pliki. Oczywiście rmdir /s path-to-folderusunie folder ze wszystkimi zawartymi w nim plikami, ale pytający chciał wiedzieć, jak usunąć wszystko z katalogu roboczego.
Katz_Katz_Katz

Ta odpowiedź działała dla mnie najlepiej. Przy wszystkich innych odpowiedziach nie usuwa niepustych katalogów podczas używania / Q i zawsze prosi o potwierdzenie, gdy nie używa się / Q.
marijnr

5
rmdir "c:\pathofyourdirectory" /q /s

Nie zapomnij użyć cytatów, a /q /sto spowoduje usunięcie wszystkich repozytoriów i bez monitowania.


2
Pytanie brzmiało: „Chciałbym usunąć wszystkie pliki i podfoldery w pliku wsadowym w systemie Windows 7 i zachować górny folder.
Werner Henze

5

możesz użyć rmdir, aby usunąć pliki i podfolder:

rmdir /s/q MyFolderPath

Jest to jednak znacznie szybsze, szczególnie gdy masz w swojej strukturze wiele podfolderów, aby używać del przed rmdir, jak poniżej:

del /f/s/q MyFolderPath > nul
rmdir /s/q MyFolderPath

Pierwsza opcja daje błąd „katalog nie jest pusty”. Pierwsze polecenie w drugiej opcji usuwa cały folder. Nie utrzymuje tego tak, jak chciałem. Drugie polecenie nie jest potrzebne, jeśli pierwsze polecenie usunęło cały folder.
Tony_Henrich

rmdirPoleceń (oba są takie same) usunie folder nadrzędny. To nie jest odpowiedź na pytanie. Dlaczego ludzie nie czytają?
Hashim

3

Jeśli chcesz usunąć wszystkie pliki w folderze, w tym wszystkie podfoldery, i nie polegać na pewnych błędach, aby utrzymać folder główny nienaruszony (jak widziałem w innej odpowiedzi), możesz mieć plik wsadowy taki jak ten:

@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
    )

)

A potem po prostu nazwałbyś to:

empty_my_folder.bat "C:\whatever\is\my folder"

3

Możesz to zrobić szybko i łatwo, umieszczając te trzy instrukcje w pliku nietoperza:

mkdir empty_folder
robocopy /mir empty_folder "path_to_directory"
rmdir empty_folder

Jest to niezwykle przydatne, ponieważ usuwa również wszelkie ukryte lub systemowe pliki.
słabypust

1

To działało dla mnie lepiej, gdy miałem spacje w nazwach folderów.

@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

)

Ludzie zawsze zapominają o spacji w nazwach.
Kevin Panko

1

Aby usunąć plik:

del PATH_TO_FILE

Aby usunąć folder ze wszystkimi plikami:

rmdir /s /q PATH_TO_FOLDER

Usunięcie wszystkich plików z określonego folderu (nie usuwanie samego folderu) jest nieco skomplikowane. del /s *.*nie można usunąć folderów, ale usuwa pliki ze wszystkich podfolderów. Potrzebne są więc dwa polecenia:

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

Możesz utworzyć skrypt, aby usunąć cokolwiek chcesz (folder lub plik) w następujący sposób 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%

Kilka przykładów użycia:

mydel.bat "path\to\folder with spaces"
mydel.bat path\to\file_or_folder

0

To działało dla mnie.

  1. Przejdź do folderu, w którym chcesz usunąć pliki.
  2. Rodzaj: del *
  3. Y za tak
  4. Gotowy
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.