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

21

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

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

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

user2676140
источник
3
Что мешает вам использовать rm *.avi? (Да, это правильный синтаксис PowerShell, потому что rmэто псевдоним del.
GiantTree
2
Технически rmи delоба являются псевдонимами Remove-Itemкомандлета.
root

Ответы:

15

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

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

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

GiantTree
источник
14
Чтобы сделать это рекурсивноls *.avi -Recurse | foreach {rm $_}
Каньон
11

Предполагая предпочтительный метод открытия экземпляра 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 }
Дэвид Меткалф
источник
2

Remove-ItemCommandlet должно быть все , что вам нужно. Просто передайте корневую папку, в которой существуют avi-файлы, и передайте recurseфлаг вместе с фильтром:

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

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

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

Кит Миллер
источник
1
Не уверен, почему этот ответ получил отрицательное голосование. -WhatIfВыключатель является ненужным. Я внес изменение в этот ответ. +1 Remove-ItemКомандлет - это все, что вам нужно, и он работает быстрее, чем принятый в настоящее время ответ.
Грег Бургхардт
Это хорошая идея, чтобы -whatifубедиться, что вы удалите только те файлы, которые хотите удалить. И особенно при предложении команды удаления неизвестным специалистам. Лучше всего держать учебные колеса на.
Кит Миллер
0

Предположим, в текущем каталоге есть несколько текстовых файлов.
dir * -include *.txtИ dir *.txtработает, как ожидалось, но dir -include *.txtничего не дает. Причина хорошо объяснена на переполнении стека .

Исправленная команда:
dir 'C:\Users\ramrod\Desktop\Firefly\*.avi' | foreach {del $_}

гость-VM
источник
0

Это, наконец, сделал это для меня - попробовал все выше и нада.

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

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

visionmn2
источник
0

попробуй это

Remove-Item "c:\temp\*.txt" 
Esperento57
источник
1
Эй, похоже, это не удаляет файлы avi, и, похоже, не делает этого и из рассматриваемой папки. Не могли бы вы улучшить этот ответ или объяснить, как он может помочь в этой ситуации?
Sirex