Xóa tất cả các tệp thuộc loại cụ thể (phần mở rộng) một cách đệ quy xuống một thư mục bằng cách sử dụng một tệp loạt


84

Tôi cần xóa tất cả các tệp .jpg và .txt (ví dụ) trong dir1 và dir2.

Những gì tôi đã thử là:

@echo off
FOR %%p IN (C:\testFolder D:\testFolder) DO FOR %%t IN (*.jpg *.txt) DO del /s %%p\%%t

Trong một số thư mục, nó đã hoạt động; ở những người khác thì không.

Ví dụ: điều này không làm bất cứ điều gì:

@echo off
FOR %%p IN (C:\Users\vexe\Pictures\sample) DO FOR %%t IN (*.jpg) DO del /s %%p\%%t

Tôi đang thiếu điều gì trong đoạn mã thứ hai? Tại sao nó không hoạt động?


Sẽ hữu ích nếu bạn cung cấp thêm thông tin về cách chính xác nó "không hoạt động". Kết quả thực tế khác với kết quả mong đợi như thế nào? Bạn có nhận được một thông báo lỗi? Nào?
Ansgar Wiechers,

Câu trả lời:


202

Bạn có thể sử dụng ký tự đại diện với dellệnh và /Sthực hiện điều đó một cách đệ quy.

del /S *.jpg

Phụ lục

@BmyGuest đã hỏi tại sao câu trả lời không del /s c:\*.blaawbgđược ủng hộ ( ) khác với câu trả lời của tôi.

Có một sự khác biệt rất lớn giữa chạy del /S *.jpgdel /S C:\*.jpg. Lệnh đầu tiên được thực hiện từ vị trí hiện tại , trong khi lệnh thứ hai được thực hiện trên toàn bộ ổ đĩa .

Trong trường hợp bạn xóa jpgtệp bằng lệnh thứ hai, một số ứng dụng có thể ngừng hoạt động và bạn sẽ mất tất cả ảnh gia đình của mình. Điều này hoàn toàn gây khó chịu nhưng máy tính của bạn vẫn có thể chạy.

Tuy nhiên, nếu bạn đang làm việc trên một số dự án và muốn xóa tất cả các dlltệp của mình trong đó myProject\dllvà chạy tệp loạt sau:

@echo off

REM This short script will only remove dlls from my project... or will it?

cd \myProject\dll
del /S /Q C:\*.dll

Sau đó, bạn sẽ xóa tất cả dllcác tệp trong C:\ổ đĩa của mình . Tất cả các ứng dụng của bạn ngừng hoạt động, máy tính của bạn trở nên vô dụng và ở lần khởi động lại tiếp theo, bạn sẽ bị dịch chuyển trong chiều không gian thứ tư, nơi bạn sẽ bị mắc kẹt vĩnh viễn.

Bài học ở đây là không chạy lệnh như vậy trực tiếp tại thư mục gốc của ổ đĩa (hoặc ở bất kỳ vị trí nào khác có thể nguy hiểm, chẳng hạn như %windir%) nếu bạn có thể tránh được. Luôn chạy chúng cục bộ nhất có thể.


3
thêm một dòng pausevào cuối sẽ cho phép người dùng xem thông tin nhật ký đầy đủ.
KNU

2
Cảm ơn về phần bổ sung, Laf. Tôi nghĩ nó sẽ giúp người khác phát hiện ra sự khác biệt thực sự quan trọng này.
BmyGuest 19/10/16

Nếu ai muốn xóa từ một thư mục cụ thể, bạn có thể kết hợp cddellệnh với `&' thấy stackoverflow.com/q/8055371/7429464
FindOutIslamNow

@FindOutIslamNow hoặc bạn có thể chỉ định đường dẫn đầy đủ trong dellệnh mà không cần phải thay đổi thư mục hiện tại.
Laf

Chỉ cần một lưu ý nhỏ cho điều này - nó sẽ gây ra lỗi nếu không tìm thấy tệp nào để xóa.
Jamie Marshall

4

Tôi đã viết một tập lệnh hàng loạt cách đây một lúc cho phép bạn chọn một phần mở rộng tệp để xóa. Tập lệnh sẽ tìm trong thư mục chứa nó và tất cả các thư mục con cho bất kỳ tệp nào có phần mở rộng đó và xóa nó.

@ECHO OFF
CLS

SET found=0
ECHO Enter the file extension you want to delete...
SET /p ext="> "

IF EXIST *.%ext% (           rem Check if there are any in the current folder :)
  DEL *.%ext%
  SET found=1
)
FOR /D /R %%G IN ("*") DO (  rem Iterate through all subfolders
  IF EXIST %%G CD %%G
  IF EXIST *.%ext% (
    DEL *.%ext%
    SET found=1
  )
)

IF %found%==1 (
  ECHO.
  ECHO Deleted all .%ext% files.
  ECHO.
) ELSE (
  ECHO.
  ECHO There were no .%ext% files.
  ECHO Nothing has been deleted.
  ECHO.
)

PAUSE
EXIT

Hy vọng điều này hữu ích cho bất kỳ ai muốn nó :)


Ngoài ra, nếu bạn đã cài đặt Bash (Cygwin, WSL, v.v.), thì một cách đơn giản find . -name "*.ext" -type f -delete(trong đó ext là tiện ích mở rộng bạn đã chọn) sẽ làm được.
Pyroglyph

3

Bạn có thể sử dụng quyền này để xóa TẤT CẢ Tệp Bên trong Thư mục và Thư mục con:

DEL "C:\Folder\*.*" /S /Q

Hoặc sử dụng tùy chọn này để Chỉ Xóa Một số Loại Tệp nhất định:

DEL "C:\Folder\*.mp4" /S /Q 
DEL "C:\Folder\*.dat" /S /Q 

0

Tôi không có đủ danh tiếng để thêm bình luận, vì vậy tôi đã đăng bài này như một câu trả lời. Nhưng đối với vấn đề ban đầu với lệnh này:

@echo off
FOR %%p IN (C:\Users\vexe\Pictures\sample) DO FOR %%t IN (*.jpg) DO del /s %%p\%%t

Đầu tiên For thiếu cú ​​pháp đệ quy, nó phải là:

@echo off
FOR /R %%p IN (C:\Users\vexe\Pictures\sample) DO FOR %%t IN (*.jpg) DO del /s %%p\%%t

Bạn chỉ có thể làm:

FOR %%p IN (C:\Users\0300092544\Downloads\Ces_Sce_600) DO @ECHO %%p

để hiển thị đầu ra thực tế.


0

đây chính là nó:

@echo off

:: del_ext
call :del_ext "*.txt"
call :del_ext "*.png"
call :del_ext "*.jpg"

:: funcion del_ext
@echo off
pause
goto:eof
:del_ext
 set del_ext=%1
 del /f /q "folder_path\%del_ext%"
goto:eof

pd: thay thế folder_path bằng thư mục của bạn


-11

Nếu bạn đang cố gắng xóa .extensions nhất định trong ổ C:, hãy sử dụng cmd này:

del /s c:\*.blaawbg

Tôi có một khách hàng bị nhiễm vi-rút mã hóa và tôi cần tìm tất cả các tệp rác và xóa chúng.


13
Điều này có vẻ không an toàn đáng sợ.
dudewad

5
Sự khác biệt chính giữa câu trả lời này (-2 phiếu bầu) và câu trả lời được chấp nhận (+42 phiếu bầu) là gì?
BmyGuest

6
@BmyGuest Sự khác biệt chính là nếu bạn thực hiện lệnh của tôi ở đâu đó trong một thư mục con, nó sẽ chỉ ảnh hưởng đến các tệp nằm trong thư mục con này. Trong câu trả lời này, bạn xóa mọi thứ khớp với tên tệp trong toàn bộ ổ đĩa. Vì vậy, nếu bạn muốn xóa một số tệp dll trong dự án của mình và bạn nhập nhầm del /s c:\*.dll, thì bạn sẽ có một bất ngờ rất tồi tệ. Không bao giờ chạy các lệnh như vậy trên toàn bộ ổ đĩa, trừ khi thực sự cần thiết.
Laf

2
Tôi không nghĩ câu trả lời này xứng đáng có nhiều phiếu phản đối như vậy. Câu trả lời giải thích rằng lệnh này dành cho toàn bộ ổ đĩa (và tại sao). c:nên được thay thế bằng thư mục mong muốn nếu người đó không muốn toàn bộ ổ đĩa.
user1527152

2
Tôi nghĩ rằng nó cần nhiều phiếu phản đối nếu không muốn nói là nhiều hơn vì nó đóng vai trò như một lời tuyên bố từ chối trách nhiệm và cảnh báo về những điều không nên làm. Bạn thực sự có thể hoàn thiện mọi thứ bằng cách sao chép, dán và thực thi mã như thế này. Có rất nhiều quả trứng Phục sinh được xây dựng trong bash để dạy bài học chính xác này một cách "an toàn" .. ví dụ này có thể làm hỏng ngày của bạn. Tốt!
jacktrader
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.