Я хочу просканировать каталог (нет подкаталогов) и удалить любой файл с расширением .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
Конечно, двухсиловое соединение не обязательно, но это то, что работает, поэтому я придерживаюсь этого варианта.