Powershell для удаления всех файлов с определенным расширением

Powershell для удаления всех файлов с определенным расширением

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

get-childitem 'C:\Users\ramrod\Desktop\Firefly' -include *.avi | foreach ($_) {remove-item $_.fullname}

Что нужно изменить, чтобы удалить все .aviфайлы из папки?

решение1

Используйте del *.<extension>или один из его псевдонимов (например rm, , если вы больше привыкли к bash).

Таким образом, необходимо del *.aviудалить все файлы, заканчивающиеся .aviна в текущем рабочем каталоге.

Используйте del <directory>\*.<extension>для удаления файлов в других каталогах.


ПРЕДУПРЕЖДЕНИЕ:Оба del *.<extension>и del <directory>\*.<extension>удалят другие расширения, соответствующие шаблону. Эти файлы не отправляются в корзину.

Пример: del *.doc*удаляет *.doc, *.docmи *.docx. del <directory>\*.<extension>Работает аналогичным образом.

решение2

Если предположить, что предпочтительный метод открытия экземпляра Powershell в каталоге, то общая версия будет выглядеть следующим образом:

Get-ChildItem *.avi | foreach { Remove-Item -Path $_.FullName }

Для версии, специфичной для каталога:

Get-ChildItem -Path 'C:\Users\ramrod\Desktop\Firefly\' *.avi | foreach { Remove-Item -Path $_.FullName }

Добавьте -Recurse, чтобы Get-ChildItemповлиять на все содержащиеся папки.

Пример:

Get-ChildItem *.avi -Recurse | foreach { Remove-Item -Path $_.FullName }

решение3

TheУбрать предметCmdlet должен быть всем, что вам нужно. Просто передайте корневую папку, где находятся файлы avi, и передайте -Recurseпараметр вместе с фильтром:

Remove-Item 'C:\Users\ramrod\Desktop\Firefly\*' -Recurse -Include *.avi

Это должно выполниться быстрее, чем поиск файлов Get-ChildItemи вызов Remove-Itemкаждого из них.

  • Добавление -WhatIfпереключателя выведет список элементов, которые будут удалены, но фактическое удаление не будет выполнено.
  • Добавление -Confirmпереключателя будет запрашивать подтверждение перед удалением каждого файла, что безопаснее для людей, которым не нравитсяPowerShell.

решение4

Это наконец-то помогло мне - перепробовал все вышеперечисленное и ничего.

get-childitem "<drive>:\<folder>" -recurse -force -include *.<ext> | remove-item -force

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

Связанный контент