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ử del
và rmdir
ra 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 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ử del
và rmdir
ra 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?
Câu trả lời:
Đ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 rmdir
lệ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 rmdir
lệ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}
rm -rf /directory/
nên là toàn cầu trên tất cả các hệ điều hành.
timeout /t 3
pause
lệnh).
Thử:
rmdir /S your_directory
hoặc là:
rmdir /S /Q your_directory
để bỏ qua tin nhắn xác nhận.
del
và rmdir
không hỏi bất cứ điều gì, họ chỉ gửi một số dòng giống như trong mô tả.
rmdir /s
sẽ 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
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.
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 /q
hai 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
Sử dụng del
trên các tập tin bên trong, sau đó rmdir
để loại bỏ thư mục.
Để sử dụng rmdir
phương pháp để loại bỏ tất cả các tệp, hãy sử dụng công /S
tắ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
Thư mục các phiên bản Windows cũ hơn (DOS, Windows 95/98 / ME), DELTREE
tương đương với RM
hoặc RMDIR
. DELTREE
Mặ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.
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)"