Xóa tất cả các tệp khỏi một thư mục và các thư mục con của nó


52

Tôi muốn xóa tất cả các tệp khỏi cấu trúc thư mục, vì vậy tôi để lại một cấu trúc thư mục trống.

Điều này có thể đạt được trong tập lệnh bó hay VBScript không?

Tôi đã thử một lệnh bó rất cơ bản, nhưng điều này yêu cầu người dùng cho phép xóa từng tệp. Đây không phải là một giải pháp phù hợp vì có hàng trăm tệp và điều này sẽ tăng lên ồ ạt theo thời gian.

Bạn có thể đề nghị gì?


Bạn có nghĩa là xóa đệ quy? Điều này thực sự có thể được thực hiện. Một cái gì đó giống như rd /s /q "c:\folder asẽ thực hiện xóa đệ quy trên tất cả các tệp và thư mục trongFolder A
Ramhound

Tôi có thể làm, tôi không biết làm thế nào để tạo kịch bản trong powershell nhưng có các kịch bản powershell chạy trước đó.
BobJim

2
Bây giờ là thời điểm hoàn hảo để tìm hiểu, tôi sẽ nghiên cứu cú pháp lô và vbs cho mục đích kế thừa, nhưng đầu tư nhiều thời gian hơn vào việc học PS.
MDMoore313

Tôi chưa có cơ hội kiểm tra mã mặc dù tôi chắc chắn nó sẽ hoạt động. Tôi sẽ quay lại và chọn câu trả lời phù hợp nhất cho truy vấn ban đầu của tôi.
BobJim

Tôi sẽ khuyến nghị thứ hai @ BigHomie - Tôi vừa học được một số PowerShell và tôi phải nói rằng nó khá gọn gàng - không quá khó, một vũ khí tốt trong bất kỳ kho vũ khí nào của người lập trình. Tôi sử dụng nó khá thường xuyên bây giờ.
Bến

Câu trả lời:


75

Điều này có thể được thực hiện bằng PowerShell :

Get-ChildItem -Path C:\Temp -Include *.* -File -Recurse | foreach { $_.Delete()}

Lệnh này đưa từng mục con vào $path, thực hiện phương thức xóa trên từng mục và khá nhanh. Cấu trúc thư mục được giữ nguyên.

Nếu bạn có thể có tệp mà không có tiện ích mở rộng, hãy sử dụng

Get-ChildItem -Path C:\Temp -Include * -File -Recurse | foreach { $_.Delete()}

thay thế.

Có vẻ như -Filetham số có thể đã được thêm vào sau PowerShell v2. Nếu đó là trường hợp, thì

Get-ChildItem -Path C:\Temp -Include *.* -Recurse | foreach { $_.Delete()}

Nó nên thực hiện thủ thuật cho các tệp có phần mở rộng.

Nếu nó không hoạt động, hãy kiểm tra xem bạn có phiên bản cập nhật của Powershell không


1
Đó là -Include *.*không -Include ., sự khác biệt lớn! :-)
MDMoore313

Get-ChildItem -Path D: \ Empty ThisFolder -Include . -File -Recurse | foreach {$ _. Xóa ()}
BobJim

Tại sao bạn lại sử dụng -Include .?? Đó là vấn đề.
MDMoore313

2
Họ không thể thực hiện powershell --version? Họ không thể sử dụng số phiên bản có chữ số dương? Thật điên rồ. Hơn 1300 upvote cho một câu hỏi về cách tìm ra số phiên bản của một chương trình?
Thomas Weller

1
@demonicdaron nó không được cho là; Câu hỏi của OP là để bảo vệ cấu trúc thư mục.
MDMoore313

24

PowerShell ngắn và bộ. Không chắc chắn phiên bản thấp nhất của PS nó sẽ làm việc với.

Remove-Item c:\Tmp\* -Recurse -Force

2
Tốt đẹp và dễ dàng. Điều này đã có mẹo trong khi câu trả lời được chấp nhận thì không!
demonicdaron

Đây phải là câu trả lời được chấp nhận, thậm chí bạn chỉ có thể gõ rm *vì không thực sự nên ép buộc (hộp thoại xác nhận có tùy chọn "Có cho tất cả").
J Garcia

22

Bạn có thể làm như vậy với dellệnh:

dir C:\folder
del /S *

Việc /Schuyển đổi là chỉ xóa các tệp đệ quy.


2
Điều này sẽ chỉ xóa các tập tin nhưng để lại các thư mục?
BobJim

5
Đúng. Bạn có thể thêm /Ptùy chọn để nó sẽ yêu cầu bạn xác nhận mỗi lần xóa chỉ để kiểm tra.
phoops

cảm ơn tôi đã cho nó đi Hy vọng sẽ tiết kiệm được nhiều thời gian!
BobJim

3
Đúng. Và để xóa các tập tin hệ thống và ẩn, hãy làm attrib -s -r -h Folder\*.* /s /dtrước khi xóa. Và cho phép sử dụng takeownlệnh.
Máy bay phản lực

2
Và bạn có thể sử dụng / Q để KHÔNG yêu cầu xác nhận khi sử dụng ký tự đại diện.
Aylatan

4

Đọc giữa các dòng trên câu hỏi ban đầu của bạn, tôi có thể cung cấp một dòng mã BATCH thay thế mà bạn có thể sử dụng. Điều này sẽ làm gì khi chạy chỉ là xóa các tệp đã quá 60 ngày. Bằng cách này, bạn có thể đặt nó trong một tác vụ theo lịch trình và khi nó chạy, nó sẽ xóa các tệp thừa mà bạn không cần thay vì thổi bay toàn bộ thư mục. Bạn có thể thay đổi 60 đến 5 ngày hoặc thậm chí 1 ngày nếu bạn muốn. Điều này không xóa các thư mục.

forfiles -p "c:\path\to\files" -d -60 -c "cmd /c del /f /q @path"

Cảm ơn ý tưởng nhưng hiện tại tôi nghĩ rằng quá trình "làm trống" sẽ được hoàn thành trên khung thời gian adhoc rất đột xuất. Tôi sẽ giữ mã đó cho tương lai! Chúc mừng
BobJim

Tiêu đề ghi "Xóa tất cả các tệp khỏi một thư mục và các thư mục con của nó" vì vậy đây không phải là một giải pháp.
Anders Lindén


3

Sử dụng PowerShell để xóa một tệp hoặc thư mục. Trước khi thực hiện lệnh Xóa trong powershell, chúng tôi cần đảm bảo rằng bạn đã đăng nhập vào máy chủ hoặc PC bằng tài khoản có toàn quyền truy cập vào các đối tượng bạn muốn xóa.

Với ví dụ: http://dotnet-helpers.com/powershell-demo/how-to-delete-a-folder-or-file-USE-powershell/

Sử dụng dấu phẩy PowerShell để xóa tệp

Xóa-Mục -Path "C: \ dotnet-helpers \ DummyfiletoDelete.txt"

Lệnh trên sẽ thực thi và xóa tập tin của DummyfiletoDelete.txt, có mặt bên trong vị trí của C C \ \ dotnet-helpers.

Sử dụng dấu phẩy PowerShell để xóa tất cả các tệp

Xóa-Mục -Path "C: \ dotnet-helpers *. *"

Sử dụng dấu phẩy PowerShell để xóa tất cả các tệp và thư mục

Xóa-Mục -Path "C: \ dotnet-helpers *. *" -Rururse

-recursekhoan xuống và tìm thấy nhiều tập tin hơn. Các –recursetham số sẽ cho phép PowerShell để loại bỏ bất kỳ mục con mà không cần xin phép. Ngoài ra, tham số có thể được thêm vào để xóa các tệp ẩn hoặc chỉ đọc.

Sử dụng lệnh -Force để xóa các tệp mạnh mẽ

Sử dụng lệnh PowerShell để xóa tất cả các tệp mạnh mẽ

Xóa-Mục -Path "C: \ dotnet-helpers *. *" -Force


1

Hãy thử điều này bằng PowerShell. Trong ví dụ này tôi muốn xóa tất cả các tệp. Class:

Get-ChildItem '.\FOLDERNAME' -include *.class -recurse | foreach ($_) {remove-item $_.FullName}

1
  1. Trong Windows Explorer, chọn thư mục gốc chứa tất cả các tệp và thư mục.

  2. Tìm kiếm *

  3. Sắp xếp theo loại (Tất cả các thư mục sẽ ở trên cùng và tất cả các tệp được liệt kê bên dưới)

  4. Chọn tất cả các tập tin và nhấn Xóa.

Điều này sẽ xóa tất cả các tập tin và bảo vệ cấu trúc thư mục.


1

Xóa tất cả các tệp khỏi thư mục hiện tại và thư mục con nhưng để lại cấu trúc thư mục.

( /Q) chuyển đổi là để hỏi người dùng nếu anh ta có thể xóa

Thận trọng : hãy thử mà không có /Qđể đảm bảo bạn không xóa bất cứ thứ gì quý giá.

del /S * /Q 

1

Đây là cách dễ nhất IMO

Mở PowerShell, điều hướng đến thư mục ( cd), THEN

ls -Recurse * | rm

(Gặp sự cố) mọi thứ đã biến mất ...

Nếu bạn muốn xóa dựa trên một phần mở rộng cụ thể

ls -Recurse *.docx | rm

ls đang liệt kê thư mục

-Recurse là một lá cờ báo cho powershell đi vào bất kỳ thư mục con nào

* nói tất cả

*.doc mọi thứ với phần mở rộng .doc

| đưa đầu ra từ trái sang phải

rm xóa bỏ

Tất cả các câu trả lời khác xuất hiện để làm cho điều này trở nên khó hiểu hơn cần thiết.


0
dir C:\testx\ -Recurse -File | rd -WhatIf
What if: Performing the operation "Remove File" on target "C:\testx\x.txt".
What if: Performing the operation "Remove File" on target "C:\testx\bla\x.txt".

-1

Để bổ sung cho các câu trả lời ở trên, thực sự không cần sử dụng Get-Childitem và chuyển kết quả cho đường ống dẫn trong các câu trả lời ở trên, vì từ khóa -Include được bao gồm trong lệnh Remove-Item

Người ta có thể chỉ đơn giản là:

Xóa-Mục -Không bao gồm " . " "C: \ Temp" -Recurse

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.