Xóa hàng loạt tệp trong Windows


141

Tôi có một thư mục chứa ~ 3 triệu tệp trong một thư mục con nhất định trên máy chủ Windows 2008. Xóa thủ công các tệp qua SHIFT + DEL trên thư mục gốc mất nhiều năm. Có cách nào khác để xóa dữ liệu một cách nhanh hơn không?


1
Cũng được hỏi ở đây tại Stack Overflow: stackoverflow.com/questions/186737/iêu
Hugo

6
Làm thế nào tôi có thể nhắm mục tiêu nam châm đến một số thư mục con?
Jaime Hablutzel

7
@Jaime Với một bàn tay vững vàng, như một lập trình viên thực thụ ... ;-) xkcd.com/378
Legionair

Nếu đó là ổ SSD thì sao?
Benjamin Weiss

Câu trả lời:


179

CẢNH BÁO: nếu bạn có liên kết tượng trưng đến thư mục thì delsẽ xóa thư mục thực tế và không liên kết tượng trưng. Hãy cẩn thận với điều này và đừng chạy các lệnh này trừ khi bạn biết không có liên kết tượng trưng trong thư mục đích.


Tôi thường xuyên cần xóa rất nhiều tệp và thư mục khỏi ổ đĩa được mã hóa WinXP, thường là khoảng 22 GB 500.000 tệp trong 45.000 thư mục.

Xóa bằng Windows Explorer là rác vì nó lãng phí rất nhiều thời gian để liệt kê các tệp. Tôi thường di chuyển những thứ tôi cần xóa sang C: \ Stufftodelete và có tệp bó deletestuff.bat sang rmdir /s/q C:\stufftodelete. Điều này được lên kế hoạch để chạy vào ban đêm, nhưng đôi khi tôi cần chạy nó vào ban ngày để càng nhanh càng tốt.

Đây là kết quả của một thử nghiệm thời gian nhanh chóng cho một mẫu nhỏ 5,85 MB gồm 960 tệp trong 303 thư mục. Tôi đã chạy phương thức 1 theo sau là phương pháp 2, sau đó đặt lại các thư mục kiểm tra.

Phương pháp 1 loại bỏ các tệp và cấu trúc thư mục trong một lần:

rmdir /s/q foldername

Phương pháp 2 có một lần đầu tiên để xóa các tệp và đầu ra cho nul để tránh chi phí ghi lên màn hình cho mọi tệp singe. Một pass thứ hai sau đó dọn sạch cấu trúc thư mục còn lại:

del /f/s/q foldername > nul
rmdir /s/q foldername
  • Phương pháp 1: 17,5 giây, 14,9 giây, 13,9 giây, 14,8 giây, 13,8 giây: trung bình 14,98 giây
  • Phương pháp 2: 14.3s, 12.1s, 11.7s, 14.2s, 11.8s: trung bình 12.82 giây

Đây là kết quả của một thử nghiệm khác sử dụng 404 MB của 19.521 tệp trong 3.243 thư mục:

  • Phương pháp 1: 2 phút 20 giây
  • Cách 2: 2 phút 33 giây

Vì vậy, không có nhiều trong đó, có lẽ quá gần để đánh giá trong một bài kiểm tra.


Chỉnh sửa: Tôi đã kiểm tra lại với nhiều dữ liệu hơn, đây là trường hợp điển hình đối với tôi: 28,3 GB trong số 1.159.211 tệp trong 146.918 thư mục:

  • Cách 1: 2h 15m, 2h 34m: trung bình: 2 giờ 25 phút
  • Cách 2: 49m, 57m: trung bình: 53 phút

Wow, phương pháp 2 nhanh hơn gần ba lần so với phương pháp 1! Tôi sẽ cập nhật phần xóa của tôi.bat!


RD / S / Q hoạt động tuyệt vời nếu bạn chỉ định một đường dẫn tuyệt đối nhưng nó không hoạt động với các đường dẫn tương đối. Có một giải pháp?
Michael S.

1
@Hugo: Hugo, một câu hỏi: Trong các thử nghiệm tính thời gian ở trên, đối với một hoặc cả hai phương pháp, bạn đã đếm các tệp ngay lập tức trước khi bạn chạy phương thức chưa? Tôi đang hỏi vì nội dung thư mục có thể đã có trong bộ đệm của tệp hệ điều hành. Cảm ơn!
William C

@WilliamC: Tôi không nhớ chính xác, nhưng đối với các lần xóa lặp lại có cùng nội dung, tôi sẽ đếm ngay trước khi chỉ xóa một lần và sẽ không lặp lại cho các lần xóa khác (vì tôi đã biết các con số).
Hugo

1
Cả rmdir và del đều thất bại khi có tên đường dẫn dài hơn 256 ký tự liên quan.
Nicolai Ehemann

1
CẢNH BÁO: nếu bạn có liên kết tượng trưng đến thư mục thì delsẽ xóa thư mục thực tế và không liên kết tượng trưng. Hãy cẩn thận với điều này và đừng chạy các lệnh này trừ khi bạn biết không có liên kết tượng trưng trong thư mục đích.
user0103

18

Nếu bạn phải xóa cây thư mục lớn thường xuyên, hãy xem xét việc lưu trữ gốc của cây thư mục đó trên một phân vùng riêng, sau đó chỉ cần định dạng nhanh bất cứ khi nào bạn cần xóa mọi thứ. Nếu bạn cần tự động hóa việc này, bạn có thể sử dụng lệnh DOS này:

echo Y | format Z: /FS:NTFS /X /Q

Trong đó Z: là phân vùng 'dễ bay hơi' của bạn. Lưu ý: phân vùng phải không có nhãn. Tôi viết blog về điều này ở đây .


Và sử dụng một liên kết cứng để tạo kết nối giữa đĩa & thư mục nơi các tệp được lưu trữ nếu cần đường dẫn thư mục chính xác.
Đám mây Nime

1
@NimeCloud: Liên kết cứng không thể vượt qua các hệ thống tập tin hoặc thư mục liên kết.
grawity

5
Tuy nhiên, các liên kết tượng trưng có thể vượt qua các hệ thống tập tin và thư mục liên kết, vì vậy chúng có thể thích hợp ở đây. Xem lệnh mklink (Vista trở lên; nếu không, hãy sử dụng đường nối từ Mark Russinovich / SysIternals.)
Robert Calhoun

9

Trong dấu nhắc lệnh (Bắt đầu -> Chạy -> cmd):

del /f /s /q foldername 

Điều này thật tuyệt vời vì nó liệt kê những gì nó đang xóa .. nhưng nó giống như thứ hạng về tốc độ.
bobobobo

1
Oh woah woah woah. Không tốt như tôi nghĩ. Nó xóa các tập tin một cách nhanh chóng nhưng vẫn giữ nguyên cây thư mục.
bobobobo

1
Mà tôi có thể thêm mất khá nhiều thời gian để xóa bằng cách sử dụng.
bobobobo

3
@bobobobo tôi đã làm một số xét nghiệm với ~ 30GB / 1.000.000 file / thư mục và 15.000 del + thứ nhanh hơn chỉ rd gần ba lần: superuser.com/questions/19762/mass-deleting-files-in-windows/...
Hugo

1
Điều này sẽ thất bại nếu tên đường dẫn dài hơn 256 charachters.
Nicolai Ehemann

7

Ngoài việc sao chép / di chuyển tệp rất nhanh (sử dụng API riêng), TeraCopy có thể xóa các tệp và nó cũng rất nhanh. Kể từ khi tìm ra TeraCopy, tôi không sử dụng máy tính mà không cài đặt nó (nếu tôi sẽ sao chép / di chuyển / xóa).

Trình cài đặt tương tự cài đặt phiên bản x64 nhưng để sử dụng nó, bạn phải buộc nó bằng tay.

Bản beta mà tôi khuyên dùng trên các phiên bản ổn định: http://blog.codesector.com/2010/09/22/teracopy-2-2-beta-3/


Bạn đã bao giờ thực hiện hoặc thấy một số so sánh thời gian giống như của TeraCopy so với rmdir hoặc del hoặc del + rmdir chưa?
Hugo

1
@Hugo: Câu hỏi ngu ngốc. Tôi sẽ không đề xuất TeraCopy nếu mắt thường không nhìn thấy được, nó nhanh hơn!
rautamiekka

5
Vậy bạn có ước tính nó nhanh hơn 10% không? Hai lần nhanh như vậy? Nhanh gấp mười lần? Nhanh hơn một triệu lần? Sẽ thật tuyệt nếu bạn có thời gian chống lại rmdir với hai bộ thử nghiệm lớn và giống hệt nhau.
Hugo

1
Cảm ơn bạn! Tôi đã sử dụng TeraCopy trong nhiều năm, nhưng chưa bao giờ biết về chức năng xóa hàng loạt. Và bạn nói đúng, rất nhiều, NHIỀU nhanh hơn!
AzDayton

1
@Amalgovinus Bạn không. Bạn có thể mở chương trình và thêm tệp / thư mục thông qua kéo thả hoặc nhấp chuột phải hoặc nhấp chuột phải vào tệp / thư mục của bạn trong Explorer / trên màn hình. Khi đã hoàn tất việc di chuyển chúng, chỉ cần nhấp vào 'Xóa' và 'Chuyển đến Thùng rác' nếu bạn muốn, nhưng tôi ủng hộ 'Xóa khỏi đĩa'. Tuy nhiên, bạn sẽ cần phải khởi động TeraCopy với tư cách Quản trị viên để xác nhận nó hiển thị trên màn hình / Explorer nhấp chuột phải nếu nó không được thực hiện theo mặc định.
rautamiekka

6

Tôi đã làm một tập tin bat mà làm như vậy.

@echo off
echo --------------------WARNING--------------------
echo folder "%~1" will be deleted
echo --------------------WARNING--------------------
pause
echo Deleting folder: "%~1".
time /T
del /f/s/q "%~1" >nul
rmdir /s/q "%~1" >nul
echo Done.
time /T
echo --- Taking ownership.
takeown /f "%~1" /r /d y >nul
icacls "%~1" /reset /t >nul
icacls "%~1" /setowner "%username%" /t >nul
echo Done all.
time /T

Nó thực hiện công việc theo hai bước, một, nó cố gắng xóa các tập tin. Và thứ hai là cố gắng sở hữu các tập tin. y nên được thay đổi theo địa phương của bạn (viết tắt của yes trong tiếng Anh). Nếu thất bại nhiệm vụ (ví dụ nếu thất bại vì sự cho phép) thì bạn phải chạy lại nó. Tuy nhiên, vòng thứ hai sẽ không cố xóa các tệp đã bị xóa trong vòng đầu tiên, vì vậy nó có thể khá nhanh.


Làm thế nào để sử dụng nó. Lưu dưới dạng delfolder.bat trong tuyến đường dẫn (ví dụ: c: \ windows), sau đó chạy dưới dạng

 delfolder "foldername"   

trong đó tên người dùng là tên của thư mục

Trong thử nghiệm của tôi, việc xóa 123'000 tệp mất 3 phút (sata 7200rpm). YAY!


1
Thông thường bạn không nên sử dụng %1trong một kịch bản, nhưng "%~1". Bằng cách này, nếu đối số đã được thông qua với dấu ngoặc kép, nó sẽ được bổ sung và trích dẫn. Nếu nó không được thông qua với dấu ngoặc kép, nó được trích dẫn.
Benoit

4

Sử dụng mã dưới đây thường hoạt động tốt cho tôi.

mkdir empty_dir
robocopy empty_dir dir_to_wipe /mir /r:0 /w:0 /e
rmdir empty_dir dir_to_wipe

Thêm một `> nul` vào cuối cuộc gọi robocopy đó để bạn không phải nhìn thấy nó trên màn hình.
JoshDM

Nó tương tự như việc sử dụng rsynctrong Linux. Nó thậm chí còn ở đây nhanh hơn rmdir?
Hastur

FYI, bản sao này rất khác so với del /f/q/s+ rmdir /s/q. Nếu dir_to_wipe của bạn có rác, c:\some_important_dirbạn sẽ mất dữ liệu.
Pavel P

@Pavel sau đó sử dụng / XJ để loại trừ các điểm giao nhau và các liên kết tượng trưng?
Bernhard

Điều này đã tạo ra mánh khóe cho một thư mục ~ 36GB có hàng trăm thư mục và tệp có> 256 ký tự khiến "phương thức" del / rmdir thất bại thảm hại. Mất vài giây, Windows Explorer đã ước tính GIỜ!

3

Sử dụng lệnh rd / s từ dấu nhắc lệnh.


2
Không. Điều này chậm như xóa từ thám hiểm.
bobobobo

Vâng, nó ổn. Dù sao hoạt động tốt hơn del / f / s / q.
bobobobo

3
Chà, thực sự thì điều này tốt hơn nhiều so với việc sử dụng Explorer để xóa. Nó tiếp tục xóa, ngay cả khi một hoặc hai lần xóa sẽ thất bại (trong đó trình thám hiểm bị sặc và hủy bỏ)
bobobobo

2

Giải pháp thực tế tốt nhất có lẽ là di chuyển thư mục ra khỏi nơi nào đó (ví dụ: Thùng rác) và sau đó bắt đầu xóa nó. Nó sẽ mất nhiều thời gian, nhưng ít nhất nó sẽ tránh được.

Tôi khá chắc chắn rằng thời gian cần thiết để xóa tất cả các tệp đó là một yêu cầu vốn có của nhiệm vụ, không phải là không hiệu quả trong việc thực hiện xóa.


1

Cài đặt Cygwin và sử dụng rm -r . Nhưng đó có thể là quá mức cần thiết.


Đó là chính xác giống như rd /q /s...
Joey

Quá nhiều nhiệm vụ, và tốc độ gần như tương đương!
adeelx

1
Nó không tệ hơn một số câu trả lời khác của công cụ cài đặt-X-and-use-it ở đây, và không nên bỏ phiếu nếu chúng không tồn tại.
JdeBP

2
Cygwin có rmthực sự nhanh như cmd.exe dựng sẵn rdkhông? Bởi vì việc mô phỏng cygwin của giao diện posix khá chậm vì nó đòi hỏi phải thực hiện một số công việc bổ sung, điều rmđó không thực sự đánh giá cao.
Jan Hudec

Trong khi chờ một bộ sưu tập lớn các tệp bị xóa, tôi đã có đủ thời gian để cài đặt Cygwin và thử rm -rf. Khoảng 10 phút sau tôi đã hủy bỏ và quay trở lại del /f/s/qvì theo Cygwin, việc sử dụng đĩa chỉ là 50%. Dưới del, sử dụng đĩa được chốt ở mức 100%. Vì vậy, tôi nghĩ rằng nó phải được xóa nhanh hơn. Sử dụng CPU là <1% cho cả hai phương pháp. Tôi không chắc chắn về số tệp vì tôi đã đóng Windows File Deleter sau khi nó mất 10 phút để tính toán.
Derek Ziemba

1

Bạn có bật tên tệp ngắn không? Nếu vậy, bạn có thực sự cần nó? Xóa một tệp chỉ là một sự thay đổi siêu dữ liệu. Vì vậy, nếu bạn đã có gấp đôi số lượng tên cần xóa, số lượng công việc sẽ cao hơn đáng kể.


0

Bạn đã thử một trong hai ứng dụng này chưa?

Hãy chắc chắn đặt số lượng ghi đè thành 0 nếu bạn muốn hiệu suất nhanh nhất. Làm điều này bằng cách nhấp vào tùy chọn sau đó thay đổi giá trị ở dưới cùng của hộp thoại.

Nhập đường dẫn cần xóa trong trường Nguồn và sau đó nhấp vào Xóa.

Các ứng dụng này không đặt các tệp vào thùng rác. Sử dụng cẩn thận.


0

Điều này được cung cấp để khen ngợi và tăng cường các bước thực hiện trong các câu trả lời được đề cập trước đó.

Hai phương pháp đã cho ở trên có vẻ khá hiệu quả, nhưng để xác định hiệu suất sẽ khó trừ khi chúng được điều chỉnh theo cùng điều kiện chính xác:

  • Thiết bị & mô hình ổ cứng vật lý
    • Tốt hơn là, ATTO / Crystal Disk đã được điểm chuẩn trước khi sao chép dữ liệu trên chúng
  • Cùng phân vùng / Khối lượng vị trí & hình học
    • Cách để làm điều này sẽ là phân mảnh phân vùng / thư mục mẫu và sao chép chúng chính xác vì chúng là 2 loại Ổ đĩa cứng giống hệt nhau (từ bước trước)
  • Sau đó thực hiện các cấu hình thông qua Batch File và sử dụng Powershell Cmdlet để ghi nhật ký và đo lường hiệu suất của chúng.

    • Lý tưởng nhất, thêm một số cơ chế để ngăn chặn bất kỳ sự thiên vị bộ đệm nào do sự thoái trào của hoạt động tương tự.
  • Sau đây là một số thư mục mẫu (được đặt tên là tổng kích thước) mà tôi đã thử nghiệm nhưng không thể nhận được bất kỳ kết quả / hiệu suất kết luận nào.

r.bat

rmdir /s/q 3.2G

thứ năm

del /f/s/q 3.3G > nul
rmdir /s/q 3.3G
  • Tôi đã đăng các tệp Nhật ký đầu ra, nhưng tôi tin rằng phương sai rất lớn do kích thước và phân phối tệp thư mục, v.v.

Quyền hạn:

PS S:\T> Measure-Command { S:\T\rd.bat } > rdlog.txt

PS S:\T> Measure-Command { S:\T\r.bat } > rlog.txt

PS S:\T> Measure-Command { S:\T\rd.bat } > rd_1.7G_log.txt

PS S:\T> Measure-Command { S:\T\r.bat } > r_1.8G_log.txt

PS S:\T> Measure-Command { S:\T\r.bat } > r_2.4G_log.txt

PS S:\T> Measure-Command { S:\T\rd.bat } > rd_2.7G_log.txt

PS S:\T> Measure-Command { S:\T\r.bat } > r_3.2G_log.txt

PS S:\T> Measure-Command { S:\T\rd.bat } > rd_3.3G_log.txt

không thành công với tên> 256 ký tự

0

Câu trả lời từ Hugo là nhanh nhất nhưng nó không xóa các tệp hệ thống hoặc ẩn trong lần đầu tiên, vì vậy nếu bạn muốn một giải pháp hoàn chỉnh hơn, hãy sử dụng tham số / a:

del /f /s /q /a foldername > nul
rmdir /s /q foldername

Về tệp BAT của Magallanes , hãy hết sức cẩn thận với Takeown và icacls, vì các liên kết cứng chia sẻ cùng quyền và chủ sở hữu, vì vậy nếu có các liên kết cứng chưa bão hòa trong thư mục bạn muốn xóa, sử dụng Takeown và icacls sẽ thay đổi quyền và chủ sở hữu của các tệp bên ngoài thư mục.

Sử dụng công cụ ln.exe, bạn có thể liệt kê tất cả các tệp được liên kết cứng trong thư mục và biết liệu chúng có được liên kết cứng với các tệp bên ngoài thư mục không (liên kết cứng chưa bão hòa):

ln.exe --enum foldername > HardlinksList.txt

-1

Xóa thư mục nhanh hơn xóa nhiều tệp.

Vì vậy, nếu bạn thích sử dụng chuột thay vì dấu nhắc lệnh, bạn có thể tạo thư mục, di chuyển tệp đến đó và xóa nó (với Shift + Del như bạn đã nói).


2
Thư mục nên được tạo trên cùng một phân vùng nơi chứa các tệp. Điều này sẽ làm cho hành động di chuyển ngay lập tức. Nếu thư mục mới và các tệp nằm trên các phân vùng riêng biệt thì toàn bộ thao tác sao chép sẽ kéo dài rất nhiều.

5
Nơi nào bạn có ý tưởng rằng việc xóa một thư mục nhanh hơn xóa các tệp trong đó? Xóa một thư mục chứa là bước đầu tiên để xóa tất cả các tệp trong thư mục đó, vì vậy nó không thể nhanh hơn. Tuy nhiên, việc chuyển sang thùng rác lại là một vấn đề hoàn toàn khác, nhưng đó không phải là câu hỏi ở đây.
Joey
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.