Xóa hoàn toàn một thư mục trong Windows bằng dòng lệnh


57

Tôi cần xóa một thư mục chứa các thư mục và tập tin khác bên trong. Tôi đã thử delrmdirra lệnh nhưng đôi khi chúng thất bại với một số dòng lỗi:[PATH]: The directory isn't empty.

Có sự thay thế tốt nào không?


Tôi đã trải nghiệm sự không nhất quán trong việc rmdir với các cờ thích hợp sẽ loại bỏ mọi thứ trong cây thư mục (và / hoặc chính cây đó), và lời giải thích khả dĩ duy nhất tôi có là những gì Harry Johnston nói.
r_alex_hall

Câu trả lời:


15

Điều này xảy ra với tôi rất nhiều với các tập lệnh xây dựng tự động của tôi.

Tôi đoán lý do có thể là một số ứng dụng có tệp được mở trong thư mục đó với "chia sẻ xóa". Tức là ứng dụng cho phép xóa tệp (đó là lý do tại sao tôi cho rằng cuộc gọi DeleteFile không thất bại), nhưng tệp sẽ chỉ biến mất sau khi ứng dụng nói đã đóng.

Điều đó có nghĩa là tệp có thể vẫn ở đó khi rmdirlệnh cố gắng xóa thư mục, do đó thông báo lỗi. Ngay sau đó, ứng dụng cho biết sẽ đóng nó, tập tin sẽ biến mất và khi bạn kiểm tra thư mục để xem tập tin nào rmdirđang nói về nó sẽ trống.

Ít nhất đó là lý thuyết của tôi.

Cách giải quyết được đề xuất bởi Harry Johnston có vẻ tốt. Chỉ có tôi sẽ chèn tạm dừng ở giữa các rmdirlệnh. Tất nhiên, Windows không có lệnh "tạm dừng" dễ dàng có kịch bản (chỉnh sửa: các phiên bản Windows cổ không có, mới hơn có - xem bình luận). Nhưng nếu độ chi tiết của giây là đủ, người ta có thể sử dụng pingđể tạo tạm dừng:

ping -n {desired_delay_in_seconds + 1} 127.0.0.1 >nul

Vì vậy, trong tổng số:

rd /s /q foo
:: retry once
if exist foo (
    :: clear errorlevel
    cmd /c
    :: pause
    ping -n 2 127.0.0.1 >nul
    :: retry
    rd /s /q foo
)
:: retry yet again
if exist foo (
    cmd /c
    ping -n 2 127.0.0.1 >nul
    rd /s /q foo
)
:: give up
if exist foo {panic}

Theo kinh nghiệm của tôi, tạm dừng là không bao giờ cần thiết, nhưng YMMV. (Tất nhiên nếu thực sự có một ứng dụng khác đang chơi, tốt nhất là xác định nó và chờ đợi nó thoát ra nếu có thể.)
Harry Johnston

Chà ... tôi đã thực hiện một vòng thử lại 10 lần với độ trễ một giây cho mỗi lần thử lại. Hoạt động ngay bây giờ. Tôi sẽ không cố gắng xóa tạm dừng, chỉ để thấy nó thất bại một lần nữa :-) Tất nhiên điều đó không có nghĩa là nó cần thiết. Chỉ cần thận trọng hơn.
Paul Groke

2
OT: Đây là lý do tại sao tôi ghét các cửa sổ. Mọi thứ thật khó khăn. rm -rf /directory/nên là toàn cầu trên tất cả các hệ điều hành.

2
Thực sự có một lệnh "tạm dừng" các loại; để tạm dừng ba giây, bạn có thể sử dụng điều này:timeout /t 3
r_alex_hall

@r_alex_hall Thật vậy (nhưng thực chất chỉ từ Vista trở đi, XP và trước đó không có pauselệnh).
misha256

57

Thử:

rmdir /S your_directory

hoặc là:

rmdir /S /Q your_directory 

để bỏ qua tin nhắn xác nhận.


1
Tôi đã thử các tùy chọn này nhưng khi tôi viết delrmdirkhông hỏi bất cứ điều gì, họ chỉ gửi một số dòng giống như trong mô tả.
Francesco Zanini

2
rmdir /ssẽ xóa bất cứ thứ gì có thể xóa. Bạn có thể có các tệp bị khóa bởi một chương trình, các tệp chỉ đọc hoặc các tệp mà bạn cần quyền truy cập quản trị để xóa. Không có một lệnh nào có thể giải quyết tất cả các tình huống đó cho bạn
nvuono 17/1/13

Nếu bạn vẫn nhận được thông báo lỗi, hãy thử với PowerShell: cmdlet Remove-Item, nó mạnh hơn một chút so với rmdir.
AndrewQ

1
rmdir / S <thư mục> Đang xóa thư mục và thư mục con và thư mục. Nó cũng hỏi Bạn có chắc không. Trên Windows 10. Cảm ơn
Jasmeet

1
@r_alex_hall RMDIR / s thực sự xóa các tập tin trong thư mục. Nhưng DEL / s sẽ chỉ xóa các tệp và giữ các thư mục, đó là lý do tại sao RMDIR là lựa chọn tốt hơn
JCH2k

11

Bạn có thể có một số tệp chỉ đọc, bạn có thể sử dụng tùy chọn del / F để loại bỏ chúng bằng cách sử dụng

     del /S /F your_directory
     rmdir your_directory

Bạn cũng có thể có một số tệp bị ẩn và nếu bạn thực sự chắc chắn muốn xóa chúng, thì bạn có thể thực hiện việc này bằng cách sử dụng

     del /S /F /AH your_directory
     rmdir your_directory

Nếu điều này vẫn không thành công, thì bạn không có quyền xóa một số tệp hoặc một số tệp vẫn đang được sử dụng.


Đây phải là câu trả lời chính xác!
jdhao

4

Tôi tin rằng có một lỗi trong Windows 7 (và có lẽ các phiên bản khác) đôi khi gây ra triệu chứng này; hoặc nó có thể là một lỗi trong phần mềm của bên thứ ba. (Bạn có cài đặt Bảo vệ Điểm cuối Symantec nào không?)

Dù sao, tôi đã chạy qua nó khá thường xuyên. Trong hầu hết các trường hợp, vấn đề có thể được giải quyết bằng cách chạy rd /s /qhai hoặc ba lần liên tiếp.

Nếu đây là một tệp bó, bạn có thể làm một cái gì đó như thế này:

rd /s /q foo
if exist foo rd /s /q foo
if exist foo rd /s /q foo
if exist foo echo Help! & pause

Đã đồng ý. Sử dụng foo / s - không có tùy chọn im lặng / q - sẽ xóa tất cả các thư mục con cho bạn, nhưng bạn phải trả lời Y cho lời nhắc, do đó yêu cầu phải tham gia các tệp bó. Ít hơn lý tưởng tôi biết.
Anthony

3

Sử dụng deltrên các tập tin bên trong, sau đó rmdirđể loại bỏ thư mục.

Để sử dụng rmdirphương pháp để loại bỏ tất cả các tệp, hãy sử dụng công /Stắc trước tên thư mục và /Qđể chặn lời nhắc xóa. Đây là cách tốt nhất để làm điều đó, vì bạn không bỏ lỡ bất kỳ tập tin nào. Tuy nhiên, hãy cẩn thận khi sử dụng khóa chuyển đổi / Q, vì nó sẽ không cảnh báo bạn về các thuộc tính tệp Hệ thống hoặc Ẩn


2

Nếu bạn sử dụng nút, bạn có thể sử dụng phụ thuộc rimraf như thế này:

chạy cài đặt: npm install rimraf -g

xóa thư mục: rimraf SourceFolder

Điều này giúp tôi khi gặp lỗi:

tên tệp nguồn lớn hơn được hệ thống tệp hỗ trợ


0

Thư mục các phiên bản Windows cũ hơn (DOS, Windows 95/98 / ME), DELTREEtương đương với RMhoặc RMDIR. DELTREEMặc dù vậy, tôi sử dụng trên máy trạm Windows 7 trong các tệp bó.

Deletes a directory and all the subdirectories and files in it.

To delete one or more files and directories:
DELTREE [/Y] [drive:]path [[drive:]path[...]]

  /Y              Suppresses prompting to confirm you want to delete
                  the subdirectory.
  [drive:]path    Specifies the name of the directory you want to delete.

Note: Use DELTREE cautiously. Every file and subdirectory within the
specified directory will be deleted.

0

Tôi nghĩ bạn có thể sử dụng nó như thế này:

msg*your file is going to delete 
pause
del/s /q "C:\Users\Rd\Desktop\New folder (2)\" 
rmdir /s /q "C:\Users\Rd\Desktop\New folder (2)\"
mkdir "C:\Users\Rd\Desktop\New folder (2)"

1
Chào mừng đến với SU! Tại sao tôi xuống cấp? 1) Định dạng kém 2) Cung cấp cùng một giải pháp thiết yếu như đã được đăng cách đây vài năm (luôn đọc các giải pháp đã đăng trước khi đăng một giải pháp mới!) 3) Không phù hợp với câu hỏi (giải pháp của bạn tạo lại thư mục đã xóa, trong đó giải pháp không được yêu cầu).
zagrimsan
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.