Powershell untuk menghapus semua file dengan ekstensi file tertentu

21

Saya ingin memindai direktori (tidak ada subs) dan menghapus file dengan ekstensi .avi saya mencoba sintaks ini, tetapi tidak ada kesalahan yang dilemparkan, dan tidak ada file yang dihapus. Ini adalah kode yang saya coba

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

Apa yang harus diubah untuk menghapus semua .avifile dari folder?

pengguna2676140
sumber
3
Apa yang mencegah Anda menggunakan rm *.avi? (Ya, itu sintaks PowerShell yang valid karena rmmerupakan alias dari del.
GiantTree
2
Secara teknis, rmdan delkeduanya alias Remove-Itemcmdlet.
root

Jawaban:

15

Gunakan del *.<extension>atau salah satu dari alias itu (seperti rm, jika Anda lebih terbiasa dengan bash).

Jadi itu akan del *.avimenghapus semua file yang berakhir di .avidirektori kerja saat ini.

Gunakan del <directory>\*.<extension>untuk menghapus file di direktori lain.

GiantTree
sumber
14
Untuk melakukan ini secara rekursifls *.avi -Recurse | foreach {rm $_}
Kolob Canyon
11

Dengan asumsi metode yang disukai untuk membuka instance Powershell di direktori, versi generiknya adalah sebagai berikut:

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

Untuk versi spesifik direktori:

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

Tambahkan -Recurseke Get-ChildItemuntuk mempengaruhi semua folder yang ada.

Contoh:

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

The Remove-Itemcommandlet harus semua yang Anda butuhkan. Cukup lewati folder root di mana file avi ada dan berikan recurseflag bersama dengan filter:

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

Ini harus mengeksekusi lebih cepat daripada menemukan file melalui Get-ChildItemdan memohon Remove-Itemuntuk masing-masing.

Menambahkan -WhatIfsaklar akan meminta Anda sebelum menghapus setiap file, yang lebih aman bagi orang-orang yang kurang nyaman dengan PowerShell.

Keith Miller
sumber
1
Tidak yakin mengapa jawaban ini mendapat penurunan suara. The -WhatIfswitch yang tidak perlu. Saya mengirimkan hasil edit untuk jawaban ini. +1 Remove-ItemCommandlet adalah yang Anda butuhkan, dan berjalan lebih cepat dari jawaban yang saat ini diterima.
Greg Burghardt
Sebaiknya gunakan -whatifuntuk memverifikasi bahwa Anda hanya akan menghapus file yang ingin Anda hapus. Dan terutama ketika menawarkan perintah penghapusan kepada mereka yang memiliki keahlian teknis yang tidak diketahui. Terbaik untuk menjaga roda pelatihan tetap hidup.
Keith Miller
0

Misalkan ada beberapa file teks dalam direktori saat ini.
dir * -include *.txt& dir *.txtBekerja seperti yang diharapkan tetapi dir -include *.txttidak memberikan apa-apa. Alasannya dijelaskan dengan baik pada Stack Overflow .

Perintah yang diperbaiki:
dir 'C:\Users\ramrod\Desktop\Firefly\*.avi' | foreach {del $_}

tamu-vm
sumber
0

Ini akhirnya berhasil untuk saya - mencoba semua di atas dan nada.

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

Tentu dua-kekuatan tidak diperlukan tetapi itulah yang bekerja sehingga itulah yang saya bertahan.

visionmn2
sumber
0

coba ini

Remove-Item "c:\temp\*.txt" 
Esperento57
sumber
1
hei di sana, ini tampaknya tidak menghapus file avi, dan sepertinya tidak melakukannya dari folder yang bersangkutan. Bisakah Anda memperbaiki jawaban ini atau menjelaskan bagaimana ini bisa membantu dalam situasi ini?
Sirex