Как я могу удалить все файлы / подпапки в данной папке через командную строку?


42

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


3
Не придираться, но вы ищете, как сделать это «из командной строки», а не из «DOS». После Win ME не было подсистемы DOS.
MDMarra

@MarkM: Ну, есть / было, ntvdmно по мере того, как 64-битные системы завоевывают долю рынка, это становится все более неактуальным.
Джои

Ответы:


55

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

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

2
твой лучше: D +1
Удален

3
Пояснение: del обозначает Delete, а S обозначает Recursive.
Тамара Вийсман

3
@Tony_Henrich, узнайте больше о командах msdos здесь. computerhope.com/msdos.htm
Моав

3
и использование / Q оставляет пустые подпапки, что нежелательно.
Tony_Henrich

3
Это неправильный ответ, и я не знаю, почему он получил много голосов. Кажется, что люди не поняли вопрос полностью и не читают комментарии! Я пройду ответы и выберу правильный.
Tony_Henrich

22

Лучшее решение: например, я хочу удалить все файлы и подкаталоги родительского каталога, скажем «C: \ Users \ Desktop \ New folder \». Самый простой способ - создать командный файл из трех команд.

cd C: \ Users \ Desktop \ Новая папка \

del * / S / Q

rmdir / S / Q "C: \ Users \ Desktop \ Новая папка \"

Здесь сначала он очистит все файлы во всех подкаталогах, а затем очистит все пустые подкаталоги. Так как текущий рабочий каталог является родительским каталогом, то есть "\ New folder", команда rmdir не может удалить этот каталог самостоятельно.


1
Работает очень хорошо, за исключением предупреждения, когда система не может удалить корневую папку.
Джертер

2
Не хорошо. Твердо закодированные пути и, глядя на это, не очищают папку. Это удаляет это. Также очень опасно. Он удаляет файлы в текущей папке, если путь не завершен или введен неправильно.
Tony_Henrich

1
Как сказал @Tony_Henrich, rmdirкоманда удалитNew folder
Nuktu

Нет. Это на самом деле работает при полной очистке «Новой папки» без удаления самой папки. Единственная проблема заключается в том, что он выдает небольшое предупреждение, когда ОС не удается удалить родительскую папку. Кроме того, команда del является избыточной, если у вас нет большой папки, в этом случае она может быть быстрее. Вы можете просто изменить его так (извините за отсутствие разрывов строк в комментариях): set FOLDER = "% userprofile% \ Desktop \ Новая папка" cd% FOLDER% rmdir / S / Q% FOLDER% \> nul 2> & 1
HSuke

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

9

Перейдите в родительский каталог:

pushd "Parent Directory"

Удалить вложенные папки:

rd /s /q . 2>nul

1
Вау, это взломано. :)
Tarnay Kálmán

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 и сохранить верхнюю папку. »
Вернер Хенце

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.