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


52

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

Это может быть достигнуто в пакетном или VBScript сценариях?

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

Что вы можете предложить?


Вы имеете в виду рекурсивное удаление? Это действительно может быть сделано. Нечто подобное rd /s /q "c:\folder aвыполнит рекурсивное удаление всех файлов и папок внутриFolder A
Ramhound

Я мог бы сделать, я не знаю, как писать сценарии в powershell, но у меня были сценарии powershell для предыдущего запуска.
BobJim

2
Сейчас самое подходящее время для изучения, я бы исследовал синтаксис batch и vbs для унаследованных целей, но потратил больше времени на изучение PS.
MDMoore313

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

Я буду второй рекомендацией BigHomie - я только что изучил PowerShell и должен сказать, что он довольно аккуратный - не слишком сложный, хорошее оружие в арсенале любого кодера. Я использую это довольно часто сейчас.
Бен

Ответы:


75

Это можно сделать с помощью PowerShell :

Get-ChildItem -Path C:\Temp -Include *.* -File -Recurse | foreach { $_.Delete()}

Эта команда получает каждый дочерний элемент $path, выполняет метод удаления для каждого элемента и работает довольно быстро. Структура папок осталась нетронутой.

Если у вас могут быть файлы без расширения, используйте

Get-ChildItem -Path C:\Temp -Include * -File -Recurse | foreach { $_.Delete()}

вместо.

Похоже, что -Fileпараметр мог быть добавлен после PowerShell v2. Если это так, то

Get-ChildItem -Path C:\Temp -Include *.* -Recurse | foreach { $_.Delete()}

Это должно сделать трюк для файлов с расширением.

Если это не работает, проверьте, есть ли у вас актуальная версия Powershell


1
Это -Include *.*не -Include .большая разница! :-)
MDMoore313

Get-ChildItem -Path D: \ EmptyThisFolder -Include . -File -Recurse | foreach {$ _. Delete ()}
BobJim

Почему вы используете -Include .?? Вот в чем проблема.
MDMoore313

2
Они не могут реализовать powershell --version? Разве они не могут использовать номер версии с положительными цифрами? Это просто безумие. Более 1300 голосов за вопрос о том, как узнать номер версии программы?
Томас Веллер

1
@demonicdaron не должен; Вопрос ОП касался сохранения структуры папок.
MDMoore313

25

Короткая и удобная PowerShell. Не уверен, с какой низшей версией PS он будет работать.

Remove-Item c:\Tmp\* -Recurse -Force

2
Легко и приятно. Это помогло, а принятый ответ - нет!
demonicdaron

Это должен быть принятый ответ, вы можете даже просто напечатать, rm *так как на самом деле не рекомендуется форсировать (в любом случае в диалоговом окне подтверждения есть опция «Да для всех»).
Дж Гарсия

22

Вы можете сделать это с помощью delкоманды:

dir C:\folder
del /S *

/SПереключатель , чтобы удалить только файлы рекурсивно.


2
Это только удалит файлы, но оставит папки?
BobJim

5
Да. Вы можете добавить /Pопцию, чтобы она попросила вас подтвердить каждое удаление, чтобы проверить это.
фотки

спасибо плохо попробуй! надеюсь, сэкономит массу времени!
BobJim

3
Да. А для удаления скрытых и системных файлов сделайте attrib -s -r -h Folder\*.* /s /dперед удалением. А для разрешений используйте takeownкоманду.
Jet

2
И вы можете использовать / Q, чтобы НЕ запрашивать подтверждение при использовании подстановочных знаков.
Айлатан

4

Читая между строк вашего исходного вопроса, я могу предложить альтернативную строку кода BATCH, которую вы можете использовать. При запуске будут удалены только файлы старше 60 дней. Таким образом, вы можете поместить это в запланированное задание, и при запуске оно удалит лишние файлы, которые вам не нужны, вместо того, чтобы уничтожить весь каталог. Вы можете изменить от 60 до 5 дней или даже 1 день, если хотите. Это не удаляет папки.

forfiles -p "c:\path\to\files" -d -60 -c "cmd /c del /f /q @path"

Спасибо за идею, но в настоящее время я думаю, что процесс «опорожнения» будет завершен в очень незапланированные временные рамки. Я оставлю этот код на будущее! Приветствия
BobJim

Заголовок гласит «Удалить все файлы из папки и ее подпапок», так что это не решение.
Андерс


3

Используйте PowerShell для удаления отдельного файла или папки. Перед выполнением команды Delete в powershell мы должны убедиться, что вы вошли на сервер или ПК с учетной записью, которая имеет полный доступ к объектам, которые вы хотите удалить.

Пример: http://dotnet-helpers.com/powershell-demo/how-to-delete-a-folder-or-file-using-powershell/

Использование PowerShell Comnads для удаления файла

Remove-Item -Path "C: \ dotnet-helpers \ DummyfiletoDelete.txt"

Приведенная выше команда выполнит и удалит файл «DummyfiletoDelete.txt», который находится внутри папки «C: \ dotnet-helpers».

Использование PowerShell Comnads для удаления всех файлов

Remove-Item -Path "C: \ dotnet-helpers *. *"

Использование PowerShell Comnads для удаления всех файлов и папок

Remove-Item -Path "C: \ dotnet-helpers *. *" -Recurse

-recurseсверлит вниз и находит намного больше файлов. Этот –recurseпараметр позволит PowerShell удалять любые дочерние элементы без запроса разрешения. Кроме того, параметр –force может быть добавлен для удаления скрытых или доступных только для чтения файлов.

Использование команды -Force для принудительного удаления файлов

Использование команды PowerShell для принудительного удаления всех файлов

Remove-Item -Path "C: \ dotnet-helpers *. *" -Force


1

Попробуйте это с помощью PowerShell. В этом примере я хочу удалить все файлы .class:

Get-ChildItem '.\FOLDERNAME' -include *.class -recurse | foreach ($_) {remove-item $_.FullName}

1
  1. В проводнике Windows выберите корневой каталог, содержащий все файлы и папки.

  2. Искать *

  3. Сортировать по типу (все папки будут вверху, а все файлы перечислены внизу)

  4. Выберите все файлы и нажмите Удалить.

Это удалит все файлы и сохранит структуру каталогов.


1

Удалите все файлы из текущего каталога и подкаталогов, но оставив структуру папок.

( /Q) переключатель для запроса пользователя, если он в порядке, чтобы удалить

Внимание : попробуйте без, /Qчтобы убедиться, что вы не удаляете ничего ценного.

del /S * /Q 

1

Это самый простой способ ИМО

Откройте PowerShell, перейдите в каталог ( cd), ТО

ls -Recurse * | rm

(Пуф) все прошло ...

Если вы хотите удалить на основе определенного расширения

ls -Recurse *.docx | rm

ls перечисляет каталог

-Recurse это флаг, говорящий PowerShell, чтобы войти в любые подкаталоги

* говорит все

*.doc все с расширением .doc

| подать вывод слева направо

rm удалять

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


0
dir C:\testx\ -Recurse -File | rd -WhatIf
What if: Performing the operation "Remove File" on target "C:\testx\x.txt".
What if: Performing the operation "Remove File" on target "C:\testx\bla\x.txt".

-1

В дополнение к приведенным выше ответам, на самом деле нет необходимости использовать Get-Childitem и передавать результат в конвейер в приведенных выше ответах, поскольку ключевое слово -Include включено в команду Remove-Item.

Можно просто:

Remove-Item -Include " . " "C: \ Temp" -Recurse

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.