Как удалить все файлы и папки в папке с помощью вызова cmd


89

Пользуюсь виндой.

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

Я могу так называть:

>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
я смог сделать это без командного файла. используйте && для объединения двух операций
Мэтт Брукхейс

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

Вы заменяете слово destinationпутем, возможно, при необходимости заключая все в кавычки.
Joey

4
Этот ответ меня огорчает, потому что это лучший ответ
KCD

1
@stenci: вторая строка может удалить только данный каталог. Он действительно делает это рекурсивно, но не может удалить файл. Следовательно, чтобы удалить все внутри каталога, вы должны удалить все файлы и все каталоги. Обратите внимание, что речь идет не об удалении одного каталога и всего в нем. Речь идет об удалении всего внутри и сохранении родительского каталога.
Joey

39

del c:\destination\*.* /s /qработал у меня. Надеюсь, это сработает и для вас.


13
Удаляет все файлы, но не папки.
Эрик

2
Что сработало для меня, так это перейти к папке. (щелкните правой кнопкой мыши, выберите здесь приглашение open cmd) затемdel *.*
Daniel L. VanDenBosch

пример для относительного путиdel "../../server/front-end\*.*"
FindOutIslamNow

@ DanielL.VanDenBosch, это не очень похоже на сценарий.
Synetech

29

Я думаю, что самый простой способ сделать это:

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

Последний «\» на пути - важная часть.


27
Это также удаляет саму папку.
Archie

Отлично, это то, что мне нужно :)
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переключателем для удаления всех файлов и вложенные папки. По умолчанию robocopy не копирует безопасность, поэтому списки ACL в корневой папке должны оставаться неизменными.

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

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

0

У меня была индексная папка с 33 папками, из которых нужно было удалить все файлы и подпапки. Я открыл командную строку в папке index и затем использовал следующие команды:

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

Я разделил их на две строки (нажмите Enter после первой строки, а когда вас попросят добавить вторую строку), потому что, если ввести в одной строке, это может не сработать. Эта команда сотрет каждый каталог, а затем создаст новый, который будет пустым, тем самым удалив все файлы и вложенные папки в исходном каталоге.


0

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

Line1 pushd "Родительский каталог"

Удалить подпапки

Линия2 рд / сек / кв. 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.