Як я можу видалити всі файли / підпапки в заданій папці за допомогою командного рядка?


42

Я хотів би видалити всі файли і підпапки в пакетному файлі в Windows 7 і зберегти верхню папку. В основному випорожнення папки. Яка інструкція для цього командного рядка?


3
Не для нитпика, але ви шукаєте, як зробити це "з командного рядка", а не з "DOS". Не було підсистеми DOS від Win ME.
MDMarra

@MarkM: Ну, є / було, ntvdmале оскільки 64-бітні системи отримують частку ринку, це стає все більш неактуальним.
Joey

Відповіді:


55

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

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

2
ваше краще: D +1 - Видалено мою відповідь
BloodPhilia

3
Пояснення: del позначає «Видалити», а «S» - «рекурсивний».
Тамара Війсман

3
@Tony_Henrich, Докладніше про команди msdos тут. computerhope.com/msdos.htm
Моаб

3
а використання / Q зберігає порожні підпапки, що небажано.
Tony_Henrich

3
Це неправильна відповідь, і я не знаю, чому вона отримала багато голосів. Здається, люди не зрозуміли це питання повністю і не читають коментарів! Я перегляну відповіді і виберу правильну.
Tony_Henrich

22

Найкраще рішення: наприклад, я хочу видалити всі файли та підкаталоги батьківського каталогу, щоб сказати "C: \ Користувачі \ Настільний \ Нова папка \". Найпростіший спосіб - створити пакетний файл із трьох команд.

cd C: \ Користувачі \ Настільний \ Нова папка \

del * / S / Q

rmdir / S / Q "C: \ Користувачі \ Настільний \ Нова папка \"

Тут спочатку буде очищено всі файли у всіх підкаталогах, а потім очищено всі порожні підкаталоги. Оскільки поточний робочий каталог - це батьківський каталог, тобто "\ Нова папка", команда rmdir не може видалити сам цей каталог.


1
Працює дуже добре, за винятком попередження, коли система не може видалити кореневу папку.
Джертер

2
Не добре. Жорстко закодовані контури і, дивлячись на нього, він не спорожнює папку. Це прибирає. Дуже небезпечно також. Він видаляє файли в поточній папці, якщо шлях не виходить або неправильно передається.
Tony_Henrich

1
Як заявив @Tony_Henrich rmdirкоманду видалятьNew folder
Nuktu

Ні. Це насправді працює при повному очищенні "нової папки" без видалення самої папки. Єдине питання полягає в тому, що воно дає незначне попередження, коли ОС не зможе видалити батьківську папку. Крім того, команда del є зайвою, якщо у вас є велика папка, в цьому випадку вона може бути швидшою. Ви можете просто змінити його як такий (Вибачте за відсутність розривів рядків у коментарях): встановіть FOLDER = "% userprofile% \ Desktop \ New folder" cd% FOLDER% rmdir / S / Q% FOLDER% \> nul 2> & 1
HSuke

3
Справжній небезпечний. Якщо хтось йде вперед і видаляє / перейменовує `C: \ Users \ Desktop \ New folder`, найперший рядок із компакт-диском виходить з ладу і ваш пакетний файл із задоволенням видаляє все, що знаходиться в поточному (за замовчуванням) каталозі. Який міг би бути вашим робочим каталогом або C: \ Windows \ System32
Ishmaeel

9

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

pushd "Parent Directory"

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

rd /s /q . 2>nul

1
Ого, це хакі. :)
Тарнай Калман

1
Це по суті еквівалентно двом попереднім відповідям.
Скотт

Погоджено з вище - це копія попередніх відповідей, замінена на команди, синонімічні тим, які вони замінюють. pushdне додає сюди нічого, що cdвже не робить.
Хашим

це єдиний, який я міг використати до цих пір, який працював саме на те, що запитував Аскер, а всі інші просто видаляють усі файли. Звичайно rmdir /s path-to-folderвидалить папку з усіма речами в ній, але запитувач хотів знати, як видалити все, що працює в каталозі.
Katz_Katz_Katz

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

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

Не забудьте скористатися цитатами, оскільки /q /sвони видалять усі сховища та не вимагають.


2
Питання було "Я хотів би видалити всі файли та підпапки в пакетному файлі в Windows 7 і зберегти верхню папку "
Werner Henze

5

ви можете використовувати rmdir для видалення файлів і підпапок, наприклад:

rmdir /s/q MyFolderPath

Однак це значно швидше, особливо коли у вашій структурі багато підпапок, щоб використовувати del перед rmdir, як це:

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

Перший варіант дає помилку "каталог не порожній". Перша команда у другому варіанті видаляє всю папку. Це не зберігає так, як я хотів. Друга команда не потрібна, якщо перша команда видалила всю папку.
Tony_Henrich

rmdirКоманда (обидва ж) буде видалена батьківської папка. Це не відповідь на запитання. Чому люди не читають?
Хашим

3

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

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

)

І тоді ви просто назвете це:

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

3

Ви можете зробити це швидко та легко, помістивши ці три інструкції у свій файл bat:

mkdir empty_folder
robocopy /mir empty_folder "path_to_directory"
rmdir empty_folder

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

1

Це працювало для мене краще, коли у мене були пробіли у назвах папок.

@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

)

Люди завжди забувають про пробіли в іменах.
Кевін Панько

1

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

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

0

Це те, що працювало для мене.

  1. Перейдіть до папки, куди потрібно видалити файли.
  2. Тип: del *
  3. Y за так.
  4. Зроблено
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.