41

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

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

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

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

12 ответов12

63

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

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

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

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

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

вместо.

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

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

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

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

21

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

dir C:\folder
del /S *

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

12

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

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

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

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

Использование PowerShell:

Get-ChildItem -Path c:\temp -Include * | remove-Item -recurse 
2

Используйте PowerShell для удаления отдельного файла или папки перед началом выполнения команды «Удалить 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 позволит PowerShell удалять любые дочерние элементы без запроса разрешения. Кроме того, параметр –force может быть добавлен для удаления скрытых или доступных только для чтения файлов.

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

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

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

1

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

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

ls -Recurse * | rm

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

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

ls -Recurse *.docx | rm

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

-Recurse - это флаг, указывающий PowerShell на вход в любые подкаталоги.

* говорит все

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

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

rm удалить

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

1

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

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

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

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

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

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

  2. Ищи *

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .