Xóa tất cả các tệp không khớp với một mẫu nhất định - dòng lệnh Windows


12

Xóa các mục thông qua dòng lệnh là khá dễ dàng.

del /options filename.extension

Bây giờ, giả sử tôi muốn xóa tất cả các tệp không kết thúc bằng .jpg trong một thư mục, tôi sẽ làm điều đó như thế nào.

Vấn đề là, tôi có một phần mềm chuyển đổi tất cả các hình ảnh được chỉ định thành .jpg, nhưng nó để lại bản gốc mà tôi không cần nữa.

Sẽ hiệu quả hơn nhiều khi thực hiện một câu lệnh, so với việc thực hiện nhiều câu lệnh cho mỗi kiểu tệp khác nhau.

Câu trả lời:


14

Tôi sẽ làm như thế này:

attrib +r *.jpg
del /q *
attrib -r *.jpg

Điều này trước tiên sẽ làm cho tất cả các tệp JPG chỉ đọc, xóa mọi thứ khác (nó sẽ tự động bỏ qua các tệp chỉ đọc), sau đó làm cho các tệp JPG có thể ghi lại được.


Làm việc như một nhà vô địch. Lưu ý: chỉ cần thêm /svào mỗi dòng để bao gồm đệ quy các tệp trong thư mục con.
Chuck Wilbur

9

Điều đó thực sự khá dễ dàng.

Bạn sẽ cần forlặp lại các tệp và sau đó chỉ cần tìm tiện ích mở rộng:

for %f in (*) do if not %~xf==.jpg del "%f"

nên làm thủ thuật (mã ở đây ).


cảm ơn, nhưng điều đó một mình phụ thuộc vào bản đồ tôi đang sử dụng.
KdgDev

4
Bản đồ?
Joey

Làm thế nào để tôi nói nếu không .jpg và không .jsp và không .xml thì del?
dùng1164061 ngày

1

Giúp giải cứu
Trong thời gian của Windows 7/8, đó là sự kế thừa của dòng lệnh cũ tốt

Del C:\myFolder\* -exclude '*.jpg'

Dellà một bí danh cho Remove-Item. Nó có một số tùy chọn như recurse, bao gồm, loại trừ và bộ lọc (sử dụng tùy chọn này cho RegEx)

Bạn phải thêm \*để bao gồm các tệp trong một thư mục nhất định


Từ lời nhắc của CMD, điều này sẽ hoạt động:PowerShell.exe -Command "&{Remove-Item C:\MyFolder\* -Exclude '*.jpg'}"
Iszi

Lưu ý: PowerShell đi kèm với Win 7/8. Đối với Windows XP hoặc Vista, bạn cần tải xuống và cài đặt nó.
Iszi

1

Tôi biết nó không trả lời trực tiếp câu hỏi của bạn, nhưng bạn đã xem các tùy chọn trên trình chuyển đổi của mình để xem:

  1. Nó có thể xóa bản gốc

hoặc là

  1. Viết .jpg vào một thư mục mới?

Tôi không có lựa chọn trực tiếp để làm như vậy. Những gì nó sẽ làm là ghi đè lên bản gốc nếu đó là JPG để bắt đầu. Nhưng tất cả những thứ khác vẫn còn trên đĩa trong khi JPG của chúng được tạo.
KdgDev

@WebDevHobo - ồ, tôi sẽ đi với gợi ý của Julian rồi.
ChrisF

0

Tôi đang tìm cách để tìm tất cả các tệp KHÔNG có phần mở rộng ".mp3" trong thư mục TREE trên Windows 7 (khối lượng NTFS) có thể chứa 20.000 tệp trong hàng trăm thư mục có độ sâu khác nhau ... vì vậy sau một chút angst, tôi đã sử dụng:

cd <theplace>
dir /S | find /V "<DIR>" | find /V "Total" | find /V "bytes" | find /V "Directory" | find /V "Volume" | find /V ".mp3" | more /S

điều này liệt kê các tệp không khớp với .mp3 sau khi loại bỏ mọi thứ liên quan đến đầu ra lệnh DIR ... 99% hoạt động ... trừ khi tệp không khớp được đặt tên theo một trong các từ khóa trong đầu ra DIR tiêu chuẩn - có lẽ có một cách để làm cho báo cáo TRỰC TIẾP ít thông tin tiêu đề / tóm tắt hơn - nhưng tôi không bận tâm vì điều này đã đi gần hết.


rõ ràng mã Đăng ở đây loại bỏ một số ký tự đặc biệt ... vì vậy lệnh "cd" ở trên tự nó nằm trên một dòng và chỉ định thư mục gốc đích và lệnh "find" đầu tiên đã xóa bất kỳ dòng nào có chứa "<" DIR "> "(hình) vì đó là đầu ra của lệnh dir - nhưng mã bưu điện ở đây có thể nghĩ rằng đó là một loại hướng dẫn meta và loại bỏ nó ...
CaptPat

1
Có một cách dễ dàng hơn nhiều để làm điều này: /bcờ của dirlệnh. dir /bsẽ chỉ liệt kê tên tệp và phần mở rộng trong thư mục hiện tại, dir /s /bsẽ liệt kê tên đầy đủ của tất cả các tệp trong hiện tại và tất cả các thư mục con. Đường ống find /vthay vì một forvòng lặp là một liên lạc tốt đẹp tôi sẽ phải nhớ, nhưng tôi không nghĩ rằng nó hoạt động với del.
Bob

0

Một cách khác để xóa tất cả các tệp khớp với tên tệp được hiển thị bên dưới. Danh sách vòng lặp for là tất cả các tệp và nếu KHÔNG khớp với tên tệp (không có tên thư mục).

for /r %f in (*) do if not %~nxf == abc.xml del "%f"
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.