Làm cách nào để xóa cây thư mục qua tệp bó trên Windows 7?


36

Tôi muốn xóa toàn bộ nội dung của một thư mục được chỉ định trên Windows 7 thông qua tệp bó. Vấn đề của tôi là, 'del' hoặc 'erase' chỉ xóa các tệp chứ không phải các thư mục và 'rmdir' hoặc 'rd' luôn xóa thư mục được chỉ định với nội dung của nó, nhưng tôi chỉ muốn xóa nội dung chứ không phải chính thư mục . Tôi đã thử lệnh ' rmdir /S /Q "C:\Share\*"' khiến tôi bị lỗi cú pháp.

cách chính xác để làm điều này là gì?

Tôi đang làm việc trên Windows 7 Professional 64-bit và có quyền quản trị viên.

Câu trả lời:


36

Tệp bó của bạn sẽ cần chạy hai lệnh, một lệnh để xóa các tệp sau đó một lệnh để xóa các thư mục con. Tôi đã giả sử thư mục bạn muốn xóa làC:\Share\

Tệp bó sẽ trông giống như thế này:

del /s /f /q c:\share\*.*
for /f %%f in ('dir /ad /b c:\share\') do rd /s /q c:\share\%%f

del /s /f /q sẽ tìm kiếm đệ quy thông qua cây thư mục xóa bất kỳ tệp nào (thậm chí chỉ đọc các tệp) mà không cần nhắc xác nhận.

Dòng thứ hai lặp qua tất cả các thư mục con (hiện sẽ trống) và loại bỏ chúng.

Không thể xóa toàn bộ thư mục và tạo lại thư mục (điều mà tôi không nghĩ là bạn muốn thực hiện do quyền?) Đây là cách dễ nhất để xóa thư mục.


Nếu tôi thực hiện một chút chỉnh sửa ở đây "cho / f %% f" -> "cho / f% f" thì nó hoạt động tốt :) Cảm ơn bạn rất nhiều.
Michael K

6
delkhông cần thiết. rd/s/qsẽ xóa cả tập tin và thư mục con.
grawity

1
@grawity dellà chủ yếu ở đó cho bất kỳ tập tin trong thư mục gốc, có thể loại bỏ chuyển đổi đệ quy mặc dù.
Windos

5
@MichaelK, %% f được sử dụng trong các tệp bó,% f khi nó là một lệnh duy nhất đi thẳng đến dòng lệnh.
Windos

1
Nếu bất kỳ tên thư mục con nào chứa khoảng trắng, bạn có thể thêm "delims =" để xử lý chúng một cách chính xác (for / f "delims =" %% f in ...): Xem stackoverflow.com/q/5553040/64918
goldPseudo

27
rmdir /s/q C:\Share

Bạn nhận được "Lỗi cú pháp" vì rmdirchỉ chấp nhận tên đầy đủ, không phải ký tự đại diện. (Trong cmd.exe, mở rộng ký tự đại diện được để lại cho các chương trình riêng lẻ; không phải tất cả chúng đều được.)

Nếu bạn có nhiều thư mục bắt đầu Share..., hãy sử dụng một forvòng lặp.

for /d %f in (C:\Share*) do rmdir /s/q "%f"

3
Tôi không muốn xóa thư mục chia sẻ.
Michael K

12

Hãy thử điều này trong một dấu nhắc lệnh:

rd /s/q "C:\Share"

2
Điều này cũng loại bỏ thư mục cha, không phải nội dung của thư mục.
Teoman shipahi

2

Thế còn ?

rmdir /S /Q "target"
mkdir "target

EDIT: tất nhiên giải pháp này chỉ áp dụng khi bạn có thể chịu đựng sự vắng mặt của thư mục tạm thời.


Điều này sẽ xóa thư mục gốc.
Michael K

@MichaelK Nhiệm vụ của tôi là có thể chịu được sự vắng mặt của thư mục tạm thời, vì vậy tôi đã đi với giải pháp này. Tôi nghĩ rằng nó đơn giản và dễ đọc hơn for /ftrong những trường hợp tương tự như của tôi. Chỉ muốn chia sẻ
Vasilly.Prokopyev 7/8/2015

2
for /f "delims=" %%f in ('dir /ad /b c:\share\') do rd /s /q c:\share\%%f

Điều này không hoạt động nếu các thư mục con chứa các thư mục khác có chứa khoảng trắng.

Để thực hiện công việc này, tôi cần trích dẫn chuỗi cuối cùng, như thế này

for / f "delims =" %% f in ('dir / ad / bc: \ share \') dord / s / q "c: \ share \ %% f"

Rõ ràng, điều này làm cho lệnh hoạt động trên chuỗi được trích dẫn thay vì chỉ chính chuỗi đó.


0

Tôi sẽ thử điều này trong thư mục nơi tất cả các thư mục con sẽ bị xóa nhưng gốc (và các tệp trong thư mục gốc) còn lại như sau: for / D% v in (*) dord / s / q% v

for / D khớp với các thư mục và nd / s / q xóa từng thư mục một


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.