it-swarm.com.ru

Пакетный файл. Удалить все файлы и папки в каталоге

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

В настоящее время у меня есть следующее:

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

Это удалит все файлы .db в моем каталоге RMS, однако я хочу удалить все элементы из этого каталога.

Можете ли вы помочь мне? Благодарю.

118
user69514

del *.* вместо del *.db. Это удалит все.

44
Jon Martin

Создать пакетный файл

скопировать текст ниже в командный файл

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

Удалит все файлы и папки

143
morty346
IF EXIST "C:\Users\tbrollo\j2mewtk\2.5.2\appdb\RMS" (
    rmdir "C:\Users\tbrollo\j2mewtk\2.5.2\appdb\RMS" /s /q
)

Это удалит все из папки (и самой папки).

29
psych

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
13
Bill_Stewart

Просто соединим это с тем, что опубликовал 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)
)

Добавляет быструю проверку, что папка, определенная в переменной, существует сначала, затем меняет каталог на папку и удаляет содержимое.

11
Fantus_Longhorn

Вы можете сделать это, используя del и флаг /S (чтобы указать, что нужно извлекать все файлы из всех подкаталогов):

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

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

@RD /S /Q %VAR_PATH%

https://technet.Microsoft.com/en-gb/library/bb490990.aspx

9
PodTech.io
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
)
5
Cristian Tetic

Попробуйте это, это работает для меня, у меня есть приложение, которое сбрасывает данные в мою папку "C:\tmp", и следующее работает лучше всего для меня, оно даже не спрашивает Да или Нет, чтобы удалить данные, я сделал график запуска через каждые 5 минут

cd "C:\tmp"

del *.* /Q
4
poorvesh

Вы можете использовать robocopy для зеркалирования пустой папки в папку, которую вы очищаете.

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

Это также работает, если вы не можете удалить или воссоздать фактическую папку.

Требуется существующий пустой каталог.

2
Aaron

Еще лучше, скажем, я хочу удалить все в папке c:\windows\temp.

@echo off
rd c:\windows\temp /s /q
2
user3788752

Использование

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.

Я хотел бы упомянуть @Abdullah Sabouin с этим ответом https://stackoverflow.com/a/44578851/8238944 . Было смешанное из-за того, что я копировал его. Я не заметил его пост.

Я хотел бы поблагодарить @melpomene за указание на ошибки!

1

Просто измененная версия https://stackoverflow.com/users/478183/morty346 answer

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
0
grenix

Вы не можете удалить все, используя только rmdir или del:

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

Мое предпочтительное решение (как я использовал во многих других пакетных файлах):

rmdir /s /q . 2>NUL
0
butfly