Làm cách nào để tạo tệp bó xóa tất cả các thư mục có tên `bin` hoặc` obj` theo cách đệ quy?


31

Tôi có nhu cầu xóa tất cả bin& objthư mục trong một thư mục trên PC. Vì vậy, tôi đang nghĩ về một tệp bó để làm điều đó nhưng tôi không nổi tiếng với tệp bó trong Windows. Hãy giúp tôi.

[Chỉnh sửa]

Sau khi thảo luận với người dùng DMA57361, tôi đã tìm đến giải pháp hiện tại (mặc dù vẫn có vấn đề, hãy xem ý kiến ​​của chúng tôi):

Tạo một tệp .bat và dán lệnh bên dưới:

start for /d /r . %%d in (bin,obj) do @if exist "%%d" rd /s/q "%%d"

HOẶC LÀ

start for /d /r . %%d in (bin,obj) do @if exist "%%d" rd /s "%%d"

@ DMA57361: Khi tôi chạy tập lệnh của bạn, tôi gặp lỗi dưới đây. Bất kỳ ý tưởng?

văn bản thay thế


@ Nam - tại sao bạn lại chạy for \/d \/r ...- tại sao dấu gạch chéo kép thay vì for /d /r ...? Và chạy phiên bản "đầy đủ" /qở cuối - như tôi nói - xóa mọi thứ mà không cảnh báo nên không trả lại kết quả nào (nghĩa là nó không cho bạn biết khi nào nó hoạt động, chỉ khi nó có lỗi), bạn có chắc chắn thứ hai không chạy ở trên không hoạt động chính xác?
DMA57361

@ Nam lần chạy này cũng không giống nhau - trong hình ảnh lệnh của bạn bắt đầu bằng for / %d in và không for /d /r . %d in- bạn phải sử dụng toàn bộ lệnh bên dưới, mỗi bit có một chức năng khác nhau và rất quan trọng.
DMA57361

@ Nam Opps, lời xin lỗi của tôi, bạn hoàn toàn đúng, nó không in một vài công tắc đầu tiên! Tuy nhiên, nó không ném lỗi đó và dường như hoạt động chính xác, đối với tôi. Bạn đã thử chỉ đơn giản là chạy lệnh từ dòng lệnh, thay vì cố gắng chạy nó từ trong một tệp bó?
DMA57361

Hmm, thật lạ. Có thể Win7 của bạn đang làm một cái gì đó khác với lô so với WinXP của tôi sau đó, không chắc chắn những gì. Tôi sẽ có thể kiểm tra Win7 tại nhà tối nay, nếu không tôi sợ tôi bị kẹt vào lúc này ...
DMA57361

Trên thực tế, hãy thử tiền tố lệnh batch startvà xem điều gì sẽ xảy ra. Không lý tưởng, nhưng tôi tự hỏi nếu điều đó có thể giúp đỡ.
DMA57361

Câu trả lời:


42

Điều này đã được trả lời trước đây trên Stack Overflow, đây là nơi tôi đã lấy lực đẩy chính của câu trả lời này.

Hãy thử lệnh sau, bạn có thể chạy nó từ bên trong cmd:

for /d /r . %d in (bin,obj) do @if exist "%d" rd /s/q "%d"

Nếu bạn cần thay đổi các thư mục khác, thì chỉ cần thêm các mục mới vào (bin,obj)tập hợp ở giữa lệnh.

Thao tác này sẽ xóa mọi thứ khớp mà không cần cảnh báo và không sử dụng thùng rác - vì vậy, nếu bạn muốn thêm một chút an toàn, hãy bỏ /qcuộc gọi rdtừ cuối đến cuối và hệ thống sẽ hỏi bạn trước mỗi lần xóa.

for /d /r . %d in (bin,obj) do @if exist "%d" rd /s "%d"

Nếu bạn có ý định chạy lệnh từ trong một tệp bó , bạn sẽ cần thay thế mọi phiên bản của biến %dbằng %%d, như vậy:

for /d /r . %%d in (bin,obj) do @if exist "%%d" rd /s/q "%%d"
OR
for /d /r . %%d in (bin,obj) do @if exist "%%d" rd /s "%%d"

Theo chuyển đổi đã có trong các ý kiến ​​câu hỏi

Nếu lệnh từ chối chạy trong một tệp bó (không thể sao chép ở đây), hãy thử tiền tố lệnh với start. Mặc dù điều này sẽ bắt đầu quá trình chạy đồng thời với tệp bó, điều này có thể gây ra các vấn đề khác, nhưng có vẻ như nó hoạt động chính xác hơn.

Ngoài ra, nếu bạn có các tệp được đặt tên objhoặc bintrong cây thư mục mà lệnh đang hoạt động, thì bạn sẽ nhận được thông báo lỗi cho mỗi tệp gặp phải có tên trùng khớp. Các tệp phù hợp này sẽ không bị xóa và không nên theo cách xóa lệnh cần xóa. Nói cách khác, chúng có thể được bỏ qua một cách an toàn.


1
Bạn có thể biết làm thế nào tôi có thể bỏ qua một thư mục trong thư mục gốc này khi tôi đang chạy lệnh này không?
Goran Obradovic

Làm việc hoàn hảo! Cám ơn! +1
khr055

1

Các lệnh này sẽ hoạt động trên cmd.

del * .obj

del * .bin


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.