Plik wsadowy. Usuń wszystkie pliki i foldery w katalogu


135

Chcę mieć plik wsadowy, który usunie wszystkie foldery i pliki w moim folderze pamięci podręcznej dla mojego bezprzewodowego zestawu narzędzi.

Obecnie posiadam:

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

Spowoduje to usunięcie wszystkich plików .db w moim katalogu RMS , jednak chcę usunąć wszystko z tego katalogu. W jaki sposób mogę to zrobić?


3
Wpisz del /?po monicie. Zawiera informacje, jak korzystać z narzędzia. W tym przypadku del *.* /szadziała, ale nie rób tego w złym katalogu!
Michael Todd

35
rmdir /s /q c:\users\tbrollo\j2mewtk\2.5.2\appdb\RMS
forsvarir

Sugerowałbym, aby na głosy w górę zmienić poprawną odpowiedź
GregM

5
Odpowiedź forsvarira usuwa również RMSkatalog, co może nie być tym, co było zamierzone. (W rzeczywistości często jest to to, czego nie chcę, ponieważ wtedy tracę pierwotną sygnaturę czasową katalogu i wszelkie posiadane uprawnienia). Zobacz moją odpowiedź, jak usunąć całą zawartość katalogu, ale pozostawić sam katalog w miejsce.
Bill_Stewart

Odpowiedzi:


52

del *.*zamiast del *.db. To usunie wszystko.


56
Uwaga: Jeśli chcesz ominąć monit „Czy na pewno chcesz usunąć ...”, musisz dodać flagi / FQ:del . /F /Q
Rhyuk

40
to usuwa tylko pliki - nie foldery
icc97

52
Nie należy tego oznaczać jako poprawnej odpowiedzi, ponieważ nie powoduje to usunięcia folderów (jak stwierdzono w pytaniu).
Bill_Stewart

158

Posługiwać się:

  • Utwórz plik wsadowy

  • Skopiuj poniższy tekst do pliku wsadowego

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

Usunie wszystkie pliki i foldery.


4
Świetnie, szukałem czegoś do czyszczenia plików i folderów do comiesięcznego zadania wsadowego i to załatwiło sprawę.
Dave Harding

9
Upewnij się, że katalog istnieje, zanim to zrobisz.
Bill_Stewart,

2
Jeśli masz znaki specjalne w nazwach plików, najpierw chcp 10000zmień kodowanie na UTF-16
Demelziraptor

3
Chcę tylko dodać notatkę do komentarza od Bill_Stewart. Powodem, dla którego chcesz się upewnić, że katalog istnieje, jest to, że w przeciwnym razie wyczyści on katalog, w którym aktualnie się znajdujesz. W moim przypadku był to plik wsadowy, nad którym pracowałem przez ponad 30 minut. :( Dobrze, że reszta folderu była pod kontrolą źródła.
helios456,

2
@vee zmień pętlę na, (rmdir "%%i" /s/q 2>NUL || del "%%i" /s/q >NUL ) aby pominąć komunikaty o błędach i usunięciu
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
)

Spowoduje to usunięcie wszystkiego z folderu (i samego folderu).


13
Myślę, że chodzi o opróżnienie katalogu z całej zawartości, ale nie o usunięcie samego katalogu.
Bill_Stewart

16

del *.*usunie tylko pliki, ale nie podkatalogi. Aby niszczyć zawartość katalogu, możesz użyć tego skryptu:

@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

Te pushdzmiany do katalogu, który chcesz usunąć dzieci. Następnie, gdy rdprosi o usunięcie bieżącego katalogu i wszystkich podkatalogów, usunięcie podkatalogów powiedzie się, ale usunięcie bieżącego katalogu nie powiedzie się - ponieważ jesteśmy w nim. To powoduje błąd, który 2> NULpołyka. (2 to strumień błędów).


6
Zastanawiałem się, jak to działało przez chwilę, aby wyjaśnić innym: pushd zmienia się w katalog, z którego chcesz usunąć dzieci. Następnie, gdy rd poprosi o usunięcie bieżącego katalogu i wszystkich podkatalogów, usunięcie podkatalogów powiedzie się, ale usunięcie bieżącego katalogu nie powiedzie się - ponieważ jesteśmy w nim. Powoduje to błąd, który połyka 2> NUL. (2 to strumień błędów). Bardzo przebiegły panie Stewart!
Kinetic

Aha, i „setlocal enableextensions” włącza możliwość jednoczesnego umieszczenia bieżącego katalogu na stosie i zmiany katalogu. Wydaje się, że jest to wymagane tylko przed XP, ponieważ tam i później domyślnie jest włączone.
Kinetic

Czy możesz zintegrować informacje z komentarzy z odpowiedzią (komentarze mogą zniknąć w dowolnym momencie)? ( Bez używania etykiet „Edycja:” „Aktualizacja:” .)
Peter Mortensen

12

Właśnie złożyłem to razem z tego, co opublikował morty346:

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

Dodaje szybkie sprawdzenie, czy folder zdefiniowany w zmiennej istnieje jako pierwszy, zmienia katalog na folder i usuwa zawartość.


2
Szybka wskazówka - jeśli spróbujesz uruchomić to na ścieżce sieciowej, nawet z instrukcją „IF EXIST”, ustawienie folderu nie powiedzie się, a instrukcja zostanie zapisana w wierszu polecenia cmd „Ścieżki UNC nie są obsługiwane, domyślnie katalog Windows ”, wtedy spróbuje usunąć wszystko z katalogu Windows. Więc uważaj.
CBRF23

11

Możesz to zrobić używając deli /Sflagi (aby powiedzieć mu, aby powtarzał wszystkie pliki ze wszystkich podkatalogów):

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

RD komenda może być również używany. Rekurencyjnie usuń cicho bez monitu:

@RD /S /Q %VAR_PATH%

Rmdir (rd)


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
)

3

Spróbuj wykonać następujące czynności; mi to pasuje.

Mam aplikację, która zrzuca dane w moim folderze „C: \ tmp” i poniższe działa najlepiej. Nie pyta nawet tak lub nie, aby usunąć dane. Zrobiłem harmonogram, aby uruchamiał się co 5 minut

cd "C:\tmp"

del *.* /Q

7
Jeśli folder „C: \ tmp” nie istnieje (jeśli Ty lub inna aplikacja usunęła ten folder) i jeśli spróbujesz uruchomić ten, czy nie spowoduje to usunięcia danych z innego folderu w folderze „C: \”? (Stało się to ze mną)
Vikram

4
Jak zauważa Vikram: 1) jest to bardzo niebezpieczne i 2) nie usuwa podkatalogów, o których mowa w pytaniu.
Bill_Stewart

2
Oprócz rzeczy z folderami ... możesz po prostu zrobić del /q c:\tmp\*.*, co jest około milion razy bezpieczniejsze. Nie wspominając o cdzmianie tylko ścieżki, a nie jazdy.
Nyerguds

1
To straszna rada. Jak wspominali inni, w wyniku tego możesz wyczyścić tak wiele niezbędnych danych. Zgłoszone do usunięcia Myślę, że to takie złe.
RyanfaeScotland

2

Jeszcze lepiej, powiedzmy, że chcę usunąć wszystko z C:\windows\tempfolderu.

@echo off
rd C:\windows\temp /s /q

11
To usuwa katalog c:\windows\temp. Nie sądzę, żeby o to chodziło w pierwotnym pytaniu.
Bill_Stewart

Usunięcie katalogu wydaje mi się najłatwiejsze i jeśli później będę musiał go ponownie utworzyć, mogę. Jednym z problemów może być utrata specjalnych uprawnień do folderów. Wydaje się to jednak znacznie łatwiejsze niż większość innych odpowiedzi.
madannes

1
Niestety, usunięcie i natychmiastowe odtworzenie ze skryptu wsadowego wydaje się powodować losowe błędy „odmowa dostępu” na Win10 ...
Nyerguds

2

Możesz użyć robocopy, aby utworzyć kopię lustrzaną pustego folderu w folderze, który usuwasz .

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

Działa również, jeśli nie możesz usunąć lub odtworzyć rzeczywistego folderu.

To wymaga istniejącego pustego katalogu.


1
Zgodnie z pomocą robocopy, /MIR :: MIRror a directory tree (equivalent to /E plus /PURGE).- więc jestem prawie pewien, że /Ejest to zbędne.
Nyerguds

2

Posługiwać się

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

Ta wersja usuwa bez pytania:

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

Przykład:

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

To się wyjaśni C:\foo1\foo\foo\foo3.

(Chciałbym wspomnieć o odpowiedzi Abdullaha Sabouina . Było zamieszanie co do tego, że go kopiowałem. Nie zauważyłem jego postu. Chciałbym ci podziękować melpomene za wskazanie błędów!)


To w ogóle nie działa. rmdir foobłędy, jeśli foonie jest pustym katalogiem.
melpomene

@melpomene Znalazłem błąd i powinienem zostać naprawiony !!
TravieDude Minecraft and More

1
Nie chciałem w żaden sposób kopiować @Abdullah Sabouni. Musiałem tego nie zauważyć. Przykro mi.
TravieDude Minecraft and More

@melpomene Przedstawiłem swój błąd i mój punkt widzenia na to, co się stało. Ale zdecydowałem się nie usuwać, jeśli to i tak pomoże. Dzięki za zwrócenie uwagi.
TravieDude Minecraft and More

@TravieDudeMinecraftandMore +1 - również u mnie zadziałało.
Guy Avraham,

0

Nie możesz usunąć wszystkiego za pomocą jednego rmdirlub delsamego:

  • rmdir /s /qnie akceptuje parametrów wieloznacznych. Więcrmdir /s /q * będzie błąd.
  • del /s /f /q usunie wszystkie pliki, ale pozostaną puste podkatalogi.

Moim preferowanym rozwiązaniem (tak jak w wielu innych plikach wsadowych) jest:

rmdir /s /q . 2>NUL

0

Tylko zmodyfikowana wersja odpowiedzi GregM :

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'.

-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\

Byłeś na dobrej drodze. Po prostu dodaj kod, aby dodać folder, który zostanie ponownie usunięty.


1
Nie polecam tego rozwiązania, ponieważ usuwa katalog (w ten sposób tracąc jego uprawnienia) i odtwarza go (być może z innymi uprawnieniami).
Bill_Stewart,

-3

Powinieneś uruchomić to polecenie, aby usunąć wszystkie pliki:

del*.*

6
taka sama jak zaakceptowana odpowiedź z 26 lipca '11 o 21:04. Nie dodawaj odpowiedzi, jeśli nie masz czegoś nowego.
Stephan

2
Oprócz ważnej krytyki z @Stephan, polecenie musi być del *.*(ze spacją)
Ty Hitzeman
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.