Пакетний файл. Видаліть усі файли та папки в каталозі


135

Я хочу мати пакетний файл, який видалить усі папки та файли в папці кешу для мого бездротового набору інструментів.

На даний момент у мене є:

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

Це видалить усі .db файли в моєму каталозі RMS , проте я хочу видалити кожну річ з цього каталогу. Як я можу це зробити?


3
Введіть del /?підказку. Це дасть вам інформацію про те, як користуватися інструментом. У цьому випадку del *.* /sбуде працювати, але не роби це в неправильному каталозі!
Майкл Тодд

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

Я б запропонував за кожним голосом змінити правильну відповідь
GregM

5
відповідь forsvarir також видаляє RMSкаталог, який може бути не тим, що було призначено. (Насправді це часто те, що я не хочу, тому що я втрачаю оригінальну часову позначку каталогу та будь-які дозволи, які він мав.) Дивіться мою відповідь про те, як видалити весь вміст каталогу, але залиште сам каталог у місце.
Bill_Stewart

Відповіді:


51

del *.*замість del *.db. Це прибере все.


56
Примітка: Якщо ви хочете обійти "Ви впевнені, що хочете видалити ...", вам потрібно буде додати / FQ прапори:del . /F /Q
Rhyuk

41
це видаляє лише файли - не папки
icc97

52
Це не слід позначати як правильну відповідь, оскільки воно не видаляє папки (як зазначено в запитанні).
Bill_Stewart

158

Використання:

  • Створіть пакетний файл

  • Скопіюйте нижченаведений текст у пакетний файл

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

Це видалить усі файли та папки.


4
Дивовижно, я шукав щось для очищення файлів і папок для щомісячної пакетної роботи, і це зробило свою справу.
Дейв Хардінг

9
Переконайтеся, що каталог існує перед цим.
Bill_Stewart

2
Якщо у ваших іменах є "особливі" символи, спочатку chcp 10000змініть кодування на UTF-16
Demelziraptor

3
Просто хочу додати примітку до коментаря від Bill_Stewart. Причина, за якою ви хочете переконатися, що каталог існує, полягає в тому, що в іншому випадку буде очищено те, в якому каталозі ви зараз перебуваєте. У моєму випадку це був пакетний файл, над яким я працював понад 30 хвилин. :( Добре, що решта папки знаходилася під контролем джерела.
helios456

2
@vee змінити цикл, щоб (rmdir "%%i" /s/q 2>NUL || del "%%i" /s/q >NUL ) придушити повідомлення про помилки та видалення
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
)

Це видалить усе з папки (і самої папки).


13
Я думаю, що питання полягає у спорожненні каталогу всього вмісту, а не видаленні самого каталогу.
Bill_Stewart

16

del *.*буде видалено лише файли, але не підкаталоги. Для видалення вмісту каталогу ви можете використовувати цей сценарій:

@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

У pushdзмінах в каталог якого ви хочете видалити дитина. Тоді, коли rdзапитується видалити поточний каталог та всі підкаталоги, видалення підкаталогів успішно, але видалення поточного каталогу не вдається - тому що ми знаходимося в ньому. Це призводить до помилки, яка 2> NULпроковтує. (2 - потік помилок).


6
Я спантеличив, як саме це працювало трохи, так як пояснення для інших: кнопка змінюється в каталог, з якого ви хочете видалити дітей. Тоді, коли rd просить видалити поточний каталог та всі підкаталоги, видалення підкаталогів успішно, але видалення поточного каталогу не вдається - тому що ми знаходимося в ньому. Це призводить до помилки, яка 2> NUL проковтує. (2 - потік помилок). Дуже хитрий містер Стюарт!
Кінетик

О, і "setlocal enableextensions" вмикає можливість одночасно натискати поточний каталог на стек і змінювати каталог. Це здається, що потрібно лише до XP, оскільки там і пізніше це налаштування за замовчуванням у будь-якому разі.
Кінетик

Чи можете ви інтегрувати інформацію у коментарях у відповідь (коментарі можуть зникнути в будь-який момент)? ( Без використання міток "Правка:" "Оновлення:" Мітки .)
Пітер Мортенсен

12

Я просто склав це з того, що розмістив 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)
)

Це додає швидку перевірку того, що папка, визначена у змінній, існує спочатку, змінює каталог у папку та видаляє вміст.


2
Отже, швидка порада - якщо ви спробуєте запустити це по мережевому шляху, навіть із висловом "IF EXIST", не вдасться встановити папку і оператор буде записаний у cmd "Шлях UNC не підтримує, дефолт до каталог Windows ", тоді він спробує видалити все, що знаходиться у вашому каталозі Windows. Тож будьте обережні.
CBRF23

11

Ви можете зробити це з допомогою delі на /Sпрапор (щоб сказати йому рекурсию всі файли з усіх підкаталогів):

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

Команда RD також може бути використана. Рекурсивно видаляйте тихо, без підказки:

@RD /S /Q %VAR_PATH%

Rmdir (rd)



3

Спробуйте наступне; це працює для мене.

У мене є додаток, який скидає дані в папку "C: \ tmp", і наступне працює найкраще для мене. Він навіть не вимагає " Так" або " Ні" для видалення даних. Я склав графік, щоб він працював через кожні 5 хвилин

cd "C:\tmp"

del *.* /Q

7
Якщо папки "C: \ tmp" немає (якщо ви чи якась інша програма видалила цю папку), і якщо ви спробуєте запустити цю папку, чи не видалить вона дані з іншої папки всередині "C: \"? (Так сталося зі мною)
Вікрам

4
Як зазначає Вікрам: 1) Це дуже небезпечно, і 2) воно не видаляє підкаталоги, як зазначено в питанні.
Bill_Stewart

2
Крім речі з папками ... ви можете просто зробити del /q c:\tmp\*.*, що приблизно в мільйон разів безпечніше. Не кажучи вже про cdзміну лише шляху, а не проїзд.
Nyerguds

1
Це жахлива порада. Як вже згадували інші, ви можете в результаті очистити стільки необхідних даних. Позначено для видалення Я думаю, що це так погано.
RyanfaeScotland

2

Ще краще, скажімо, я хочу видалити все з C:\windows\tempпапки.

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

11
Це видаляє каталог c:\windows\temp. Я не думаю, що саме це задавало оригінальне питання.
Bill_Stewart

Видалити каталог мені здається найпростішим, і якщо мені потрібно буде його знову створити, я можу. Однією з проблем може бути втрата спеціальних дозволів на папки. Однак це здається набагато простішим, ніж більшість інших відповідей.
madannes

1
На жаль, видалення та негайне відтворення з пакетного сценарію, здається, дає випадкові помилки "відмовлено у доступі" на Win10 ...
Nyerguds

2

Ви можете використовувати робокопію, щоб відобразити порожню папку в папці, яку ви очищаєте.

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

Він також працює, якщо ви не можете видалити або відтворити фактичну папку.

Тут потрібен порожній каталог.


1
Згідно з допомогою роботокопії, /MIR :: MIRror a directory tree (equivalent to /E plus /PURGE).- тому я досить впевнений, що /Eце зайве.
Nyerguds

2

Використовуйте

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

Ця версія видаляється, не запитуючи:

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

Приклад:

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

Це зрозуміє C:\foo1\foo\foo\foo3.

(Я хотів би згадати відповідь Абдулла Сабуїна . Про те, що я копіював його, виник мікс. Я його не помітив. Я хотів би подякувати вам мельпомени за вказівку на помилки!)


Це зовсім не працює. rmdir fooпомилки, якщо fooце не порожній каталог.
мельпомена

@melpomene Я знайшов помилку, і її слід виправити !!
TravieDude Minecraft та більше

1
Я не хотів жодним чином копіювати @Abdullah Sabouni. Я, мабуть, цього не помічав. Мені шкода.
TravieDude Minecraft та більше

@melpomene Я заявив про свою помилку та свою точку зору на те, що сталося. Але я вирішив не видаляти, якщо це все одно допоможе. Дякуємо, що вказали на це.
TravieDude Minecraft та більше

@TravieDudeMinecraftandMore +1 - працював і для мене.
Гай Аврахам

0

Ви не можете видалити все за допомогою одного rmdirабо delодного:

  • rmdir /s /qне приймає символи підстановки. Так rmdir /s /q *буде помилка.
  • del /s /f /q видалить усі файли, але порожні підкаталоги залишаться.

Моє бажане рішення (як я використовував у багатьох інших пакетних файлах):

rmdir /s /q . 2>NUL

0

Просто модифікована версія відповіді 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\

Ви були на правильному шляху. Просто додайте код, щоб додати папку, яку знову видалено.


1
Я не рекомендую це рішення, оскільки воно видаляє каталог (тим самим втрачаючи свої дозволи) та відтворює його (можливо, з різними дозволами).
Bill_Stewart

-3

Ви повинні запустити цю команду, щоб видалити всі файли:

del*.*

6
так само, як прийнята відповідь від 26 липня 1111 о 21:04. Не додайте відповіді, коли у вас немає чогось нового.
Стефан

2
Окрім дійсної критики від @Stephan, команда повинна бути del *.*(з пробілом)
Ty
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.