Powershell để xóa tất cả các tệp với một phần mở rộng tệp nhất định


21

Tôi muốn quét một thư mục (không có phụ) và xóa bất kỳ tệp nào có phần mở rộng .avi tôi đã thử cú pháp này, nhưng không có lỗi nào được ném và không có tệp nào bị xóa. Đây là mã tôi đã thử

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

Điều gì cần được thay đổi để xóa tất cả các .avitập tin khỏi thư mục?


3
Điều gì ngăn cản bạn sử dụng rm *.avi? (Vâng, đó là cú pháp PowerShell hợp lệ vì rmlà bí danh của del.
GiantTree

2
Về mặt kỹ thuật, rmdelđều là bí danh của Remove-Itemlệnh ghép ngắn.
root

Câu trả lời:


15

Sử dụng del *.<extension>hoặc một trong những bí danh của nó (như rm, nếu bạn quen sử dụng bash hơn).

Vì vậy, nó sẽ là del *.avixóa tất cả các tập tin kết thúc trong .avithư mục làm việc hiện tại.

Sử dụng del <directory>\*.<extension>để xóa các tập tin trong các thư mục khác.


14
Để đệ quy làm điều nàyls *.avi -Recurse | foreach {rm $_}
Kolob Canyon

11

Giả sử phương thức ưa thích mở một thể hiện Powershell trong thư mục, một phiên bản chung sẽ như sau:

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

Đối với phiên bản dành riêng cho thư mục:

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

Thêm vào -Recurseđể Get-ChildItemảnh hưởng đến tất cả các thư mục chứa.

Thí dụ:

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

2

Các Remove-Itemlệnh nên là tất cả bạn cần. Chỉ cần vượt qua thư mục gốc có tệp avi tồn tại và chuyển recursecờ cùng với bộ lọc:

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

Điều này sẽ thực thi nhanh hơn so với việc tìm kiếm các tệp thông qua Get-ChildItemvà gọi Remove-Itemcho từng tệp .

Thêm công -WhatIftắc sẽ nhắc bạn trước khi xóa từng tệp, điều này an toàn hơn cho những người không thoải mái với PowerShell.


1
Không chắc chắn tại sao câu trả lời này đã bỏ phiếu xuống. Việc -WhatIfchuyển đổi là không cần thiết. Tôi đã gửi một chỉnh sửa cho câu trả lời này. +1 Lệnh Remove-Itemlà tất cả những gì bạn cần và chạy nhanh hơn câu trả lời hiện được chấp nhận.
Greg Burghardt

Đó là một ý tưởng tốt để sử dụng -whatifđể xác minh bạn sẽ chỉ xóa các tệp bạn muốn xóa. Và đặc biệt là khi đưa ra một lệnh xóa cho những người không biết chuyên môn kỹ thuật. Tốt nhất để giữ cho các bánh xe đào tạo trên.
Keith Miller

0

Giả sử có một số tệp văn bản trong thư mục hiện tại.
dir * -include *.txt& dir *.txtlàm việc như mong đợi nhưng dir -include *.txtkhông cho gì cả. Lý do được giải thích rõ về Stack Overflow .

Lệnh đã sửa:
dir 'C:\Users\ramrod\Desktop\Firefly\*.avi' | foreach {del $_}


0

Điều này cuối cùng đã làm điều đó cho tôi - đã thử tất cả ở trên và nada.

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

chắc chắn hai lực lượng là không bắt buộc nhưng đó là những gì đang hoạt động vì vậy đó là những gì tôi đang gắn bó.


0

thử cái này

Remove-Item "c:\temp\*.txt" 

1
này, điều này dường như không xóa các tập tin avi và dường như nó cũng không làm điều đó từ thư mục được đề cập. Bạn có thể cải thiện câu trả lời này hoặc giải thích nó có thể giúp ích như thế nào trong tình huống này?
Sirex
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.