Powershell для удаления всех файлов с определенным расширением
Я хочу отсканировать каталог (нет подпрограмм) и удалить любой файл с расширением .avi
Я попробовал этот синтаксис, но не выдается никаких ошибок, и файлы не удаляются. Это код, который я пробовал
get-childitem 'C:\Users\ramrod\Desktop\Firefly' -include *.avi | foreach ($_) {remove-item $_.fullname}
Что следует изменить, чтобы удалить все .avi
файлы из папки?
8 ответов
Использование del *.<extension>
или один из его псевдонимов (например, rm
, если вы более привыкли к bash).
Так было бы del *.avi
удалить все файлы, оканчивающиеся на .avi
в текущем рабочем каталоге.
использование del <directory>\*.<extension>
удалить файлы в других каталогах.
Предполагая предпочтительный метод открытия экземпляра 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 }
Remove-Item 'C:\Users\ramrod\Desktop\Firefly\*' -recurse -Include *.avi -whatif
Предположим, в текущем каталоге есть несколько текстовых файлов.dir * -include *.txt
& dir *.txt
работать как положено, но dir -include *.txt
ничего не дает Причина хорошо объяснена на переполнении стека.
Исправленная команда:dir 'C:\Users\ramrod\Desktop\Firefly\*.avi' | foreach {del $_}
del *.raw, *.log, *.op.raw
// удаляем файлы желаемого типа. Он удаляет все файлы с расширением .raw, .log, .op.raw в pwd.
ls *.raw, *.log, *.op.raw
// видим желаемый тип файлов
Это, наконец, сделал это для меня - попробовал все выше и нада.
get-childitem "<drive>:\<folder>" -recurse -force -include *.<ext> | remove-item -force
Конечно, двухсторонняя сила не обязательна, но это то, что работает, поэтому я придерживаюсь этого.
$patho = $env:USERPROFILE + '\Downloads\'
foreach($due in gci $patho -name "*.avi" )
{
$monk = $patho + $due
remove-item -path $monk
}
Уже ответил... просто уточню... использование таких кодов: Может привести к тому, что пользователь/вы случайно и навсегда удалит свои собственные папки по ошибке. В принципе, избегайте использования команды удаления элемента, если вы не уверены в восстановлении или обработке. Пропущенное простое тире и сочетание «*» могут вызвать настоящую душевную боль. Что следует сделать, чтобы удалить наборы: Относитесь как к сети.
Подсчитайте количество предметов, которые вы просматриваете, независимо от того, каталоги они или нет.
Рассмотрим элементы системы, связанные со счетным списком.
Считайте, что наборы счетчиков безопасны для прохождения или нет. (т.е. вы пытаетесь удалить несколько элементов или несколько каталогов? Вероятно, не последнее) Отмените, если на пути удаления находится несколько каталогов.
Используйте Move-Item как можно чаще и вместо этого используйте параметры -whatif или -confirm, чтобы быть уверенным, что вы не удалите свой собственный профиль пользователя.
В любом случае я всегда каким-то образом удаляю свой профиль!