PowerShell do usuwania wszystkich plików z określonym rozszerzeniem

21

Chcę przeskanować katalog (nie ma żadnych napisów) i usunąć dowolny plik z rozszerzeniem .avi Próbowałem tej składni, ale nie są zgłaszane żadne błędy i żadne pliki nie są usuwane. To jest kod, który próbowałem

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

Co należy zmienić, aby usunąć wszystkie .avipliki z folderu?

użytkownik2676140
źródło
3
Co powstrzymuje Cię przed użyciem rm *.avi? (Tak, to poprawna składnia programu PowerShell, ponieważ rmjest to pseudonim del.
GiantTree,
2
Technicznie rzecz biorąc, rmi delto zarówno aliasy z Remove-Itemapletu polecenia.
root

Odpowiedzi:

15

Użyj del *.<extension>lub jednego z jego aliasów (na przykład rm, jeśli jesteś bardziej przyzwyczajony do bashowania).

Tak byłoby del *.aviusunąć wszystkie pliki, które kończą się w .avibieżącym katalogu roboczym.

Służy del <directory>\*.<extension>do usuwania plików z innych katalogów.

GiantTree
źródło
14
Aby rekurencyjnie to zrobićls *.avi -Recurse | foreach {rm $_}
Kolob Canyon
11

Zakładając preferowaną metodę otwierania instancji Powershell w katalogu, ogólna wersja wyglądałaby następująco:

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

W przypadku wersji specyficznej dla katalogu:

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

Dodaj w -Recursecelu Get-ChildItemwpłynąć na wszystkie zawarte foldery.

Przykład:

Get-ChildItem *.avi -Recurse | foreach { Remove-Item -Path $_.FullName }
David Metcalfe
źródło
2

Polecenie Remove-Itempowinno być wszystkim, czego potrzebujesz. Wystarczy przekazać folder główny, w którym istnieją pliki avi, i przekazać recurseflagę wraz z filtrem:

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

Powinno to działać szybciej niż wyszukiwanie plików za pomocą Get-ChildItemi wywoływanie Remove-Itemdla każdego z nich.

Dodanie -WhatIfprzełącznika spowoduje wyświetlenie monitu przed usunięciem każdego pliku, co jest bezpieczniejsze dla osób mniej komfortowych z programem PowerShell.

Keith Miller
źródło
1
Nie jestem pewien, dlaczego ta odpowiedź została odrzucona. -WhatIfPrzełącznik jest niepotrzebny. Przesłałem edycję tej odpowiedzi. +1 Polecenie Remove-Itemjest wszystkim, czego potrzebujesz i działa szybciej niż obecnie akceptowana odpowiedź.
Greg Burghardt
Dobrym pomysłem jest -whatifsprawdzenie, czy usuniesz tylko pliki, które chcesz usunąć. Zwłaszcza gdy oferuje polecenie usunięcia osobom o nieznanej wiedzy technicznej. Najlepiej utrzymać koła treningowe włączone.
Keith Miller
0

Załóżmy, że w bieżącym katalogu znajduje się kilka plików tekstowych.
dir * -include *.txti dir *.txtpracuj zgodnie z oczekiwaniami, ale dir -include *.txtnic nie daje. Powód jest dobrze wyjaśniony w przypadku przepełnienia stosu .

Poprawione polecenie:
dir 'C:\Users\ramrod\Desktop\Firefly\*.avi' | foreach {del $_}

guest-vm
źródło
0

To w końcu zrobiło to dla mnie - próbowałem wszystkiego powyżej i nada.

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

pewnie dwie siły nie są wymagane, ale to działa, więc właśnie tego się trzymam.

visionmn2
źródło
0

Spróbuj tego

Remove-Item "c:\temp\*.txt" 
Esperento57
źródło
1
hej tam, to nie wydaje się usuwać plików avi i nie wydaje się, aby robiło to z danego folderu. Czy możesz poprawić tę odpowiedź lub wyjaśnić, w jaki sposób może pomóc w tej sytuacji?
Sirex,