Як видалити всі файли та папки в папці за допомогою виклику cmd


89

Я використовую Windows.

Я хочу видалити всі файли та папки в папці за допомогою системного дзвінка.

Я можу зателефонувати так:

>rd /s /q c:\destination
>md c:\destination

Ви знаєте простіший спосіб?



Відповіді:


137

Ні, я не знаю одного.

Якщо ви хочете зберегти вихідний каталог з якихось причин (ACL тощо), і замість цього дійсно хочете його очистити, ви можете зробити наступне:

del /q destination\*
for /d %x in (destination\*) do @rd /s /q "%x"

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

Зверніть увагу, що в командному файлі вам потрібно подвоїти цикл у %межах forциклу:

del /q destination\*
for /d %%x in (destination\*) do @rd /s /q "%%x"

3
я зміг зробити це без командного файлу. використовуйте && для зв’язку двох операцій
Matt Broekhuis,

1
Я повноцінна оболонка Windows-оболонки: як мені встановити пункт призначення в цьому прикладі?
low_rents

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

4
Ця відповідь мене засмучує, бо це найкраща відповідь
KCD

1
@stenci: Другий рядок може тільки видалити вказаний каталог. Він робить це рекурсивно, але видалити файл не може . Тому, щоб видалити все, що знаходиться в каталозі, потрібно видалити всі файли та всі каталоги. Зверніть увагу, що мова не йде про видалення одного каталогу та всього, що знаходиться всередині. Йдеться про видалення всього і збереження батьківського каталогу.
Джої

39

del c:\destination\*.* /s /qпрацював у мене. Я сподіваюся, це працює і для вас.


13
Видаляє всі файли, але не папки.
Ерік

2
Мені вдалося перейти до папки. (клацніть правою кнопкою миші, виберіть тут відкритий підказку cmd), потімdel *.*
Daniel L. VanDenBosch

приклад для відносного шляхуdel "../../server/front-end\*.*"
FindOutIslamNow

@ DanielL.VanDenBosch, це не дуже зручно для написання.
Synetech

29

Я думаю, що найпростіший спосіб це зробити:

rmdir /s /q "C:\FolderToNotToDelete\"

Останнє "\" на шляху є важливою частиною.


27
Це також видаляє саму папку.
Арчі

Прекрасно, це те, що мені потрібно :)
gNerb

Це працює рекурсивно, який шлях він занадто довгий?
eomeroff

2
поєднання цього з mkdir C:\FolderToNotToDeleteмені було достатньо :)
qbolec

1
Це може бути проблематично, якщо у вашій батьківській папці (яка таким чином видаляється) є деякі важливі дозволи, які вам тепер потрібно відтворити ...
Младен Б.

15

Так! Використовуйте Powershell:

powershell -Command "Remove-Item 'c:\destination\*' -Recurse -Force"

Шкода, що PowerShell - громіздкий, роздутий, дуже повільний звір. : - |
Synetech

13

Якщо імена підпапок можуть містити пробіли, їх потрібно оточити в екранованих лапках. Наступний приклад показує це для команд, що використовуються у пакетному файлі.

set targetdir=c:\example
del /q %targetdir%\*
for /d %%x in (%targetdir%\*) do @rd /s /q ^"%%x^"

6

Щоб видалити файл:

del PATH_TO_FILE

Щоб видалити папку з усіма файлами в ній:

rmdir /s /q PATH_TO_FOLDER

Видалити всі файли з певної папки (не видаляючи саму папку) трохи складно. del /s *.*не може видалити папки, але видаляє файли з усієї підпапки. Отже, потрібні дві команди:

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

Ви можете створити скрипт, щоб видалити все, що завгодно (папку або файл), наприклад 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%

Кілька прикладів використання:

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

1

Один простий варіант в один рядок - створити порожній каталог десь у вашій файловій системі, а потім використовувати ROBOCOPY( http://technet.microsoft.com/en-us/library/cc733145.aspx ) із /MIRперемикачем, щоб видалити всі файли та підпапки. За замовчуванням робокопія не копіює захист, тому ACL у вашій кореневій папці повинні залишатися недоторканими.

Також, ймовірно, хочеться встановити значення для перемикача повторних спроб /r, оскільки за замовчуванням кількість спроб становить 1 мільйон.

robocopy "C:\DoNotDelete_UsedByScripts\EmptyFolder" "c:\temp\MyDirectoryToEmpty" /MIR /r:3

0

У мене була індексна папка з 33 папками, в яких потрібно було видалити всі файли та підпапки. Я відкрив командний рядок у папці індексу, а потім використав такі команди:

for /d in (*) do rd /s /q "%a" & (
md "%a")

Я розділив їх на два рядки (натисніть клавішу Enter після першого рядка, а коли запитують більше, додайте другий рядок), тому що якщо ввести в одному рядку, це може не спрацювати. Ця команда видалить кожен каталог, а потім створить новий, який є порожнім, таким чином видаляючи всі файли та підпапки у вихідному каталозі.


0

Перейдіть до батьківського каталогу

Лист1 pushd "Батьківський каталог"

Видаліть підпапки

Line2 rd / s / q. 2> нуль

/superuser/173859/how-can-i-delete-all-files-subfolders-in-a-given-folder-via-the-command-prompt


1
Якщо ви використовуєте, pushdвам доведеться використовувати popdтеж. На жаль, popdне працює при видаленні каталогу. Отже, потрібно робити cdзамість pushd.
xmedeko

0

Це займає 2 простих кроки. [/ q означає тихий, / f означає примусовий, / s означає піддиректорію]

  1. Видаліть каталог для видалення

    del *.* /f/s/q  
    
  2. Видаліть каталог

    cd ..
    rmdir dir_name /q/s
    

Дивіться малюнок


0

спробуйте це, це зробить пошук у всій MyFolder у кореневій директорії та видалить всі папки з іменем MyFolder

for /d /r "C:\Users\test" %%a in (MyFolder\) do if exist "%%a" rmdir /s /q "%%a"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.