Làm thế nào để giải quyết lỗi "Thư mục không trống" khi chạy lệnh rmdir trong tập lệnh loạt?


92

Tôi đang tạo một tập lệnh hàng loạt và một phần của tập lệnh đang cố gắng xóa một thư mục và tất cả các thư mục con của nó. Tôi đang gặp lỗi không liên tục về thư mục con không trống. Tôi đã đọc một bài báo về việc lập chỉ mục là thủ phạm. Tôi đã tắt WSearch nhưng cuối cùng lại gặp lỗi. Đây là lệnh:

rmdir /S /Q "C:\<dir>\"

Tôi có thể hỏi một số thông tin về loại tệp mà cửa sổ cảnh báo cho bạn không? Đối với tôi, điều này chỉ xảy ra với các tệp PDF ngay sau khi tôi di chuyển / sao chép chúng.
Jake Stevens-Haas

Câu trả lời:


88

Tôi đã trải qua những vấn đề tương tự như Harry Johnston đã đề cập. rmdir /s /qsẽ phàn nàn rằng một thư mục không trống mặc dù /snó được dùng để làm trống cho bạn! Cá nhân tôi nghĩ đó là một lỗi trong Windows.

Cách giải quyết của tôi là với delmọi thứ trong thư mục trước khi xóa chính thư mục đó:

del /f /s /q mydir 1>nul
rmdir /s /q mydir

(Hàm 1>nulẩn đầu ra tiêu chuẩn delvì nếu không, nó sẽ liệt kê mọi tệp đơn mà nó xóa.)


Tôi đã gặp phải một tình huống trong đó một số thư mục con bên trong mydirtạo ra cùng một lỗi "không trống". Vì vậy, tôi đã phải cdvào mydirvà thực hiện deltrên các tập tin trong mỗi của những thư mục là tốt. Cuối cùng thì nó cũng hoạt động, nhưng nếu tôi phải lặp lại quá trình này lần thứ ba ở một cấp lại khác, tôi sẽ cảm thấy khá thất bại.
gfullam

@gfullam Theo như tôi nhớ lại, phương pháp của tôi cũng phải hoạt động trên các thư mục con đệ quy, cho mọi độ sâu. Đó là những gì del /shiện.
BoffinBrain

Sử dụng explorer (có lẽ cũng là mkdir => KHÔNG!), Thêm một thư mục (và thay đổi tên) sẽ hoàn thành công việc xóa chỉ bằng rd /s /q mydirlệnh.
Master DJon

1
Được rồi, tôi nghĩ rằng xóa sổ và di chuyển sang Linux là rất nhiều dễ dàng hơn nỗi đau này :)
RajnishCoder

1
@RajnishCoder Sống với Windows về cơ bản là một thế giới của các cách giải quyết. Vấn đề cụ thể này không là gì so với các vấn đề khác với Windows 10!
BoffinBrain

46

Tôi quen với vấn đề này. Cách giải quyết đơn giản nhất là lặp lại thao tác có điều kiện. Tôi chưa bao giờ thấy nó bị lỗi hai lần liên tiếp - trừ khi thực sự có tệp đang mở hoặc vấn đề về quyền, rõ ràng!

rd /s /q c:\deleteme
if exist c:\deleteme rd /s /q c:\deleteme

11
thánh molly, điều này không có nghĩa là nó đã hoạt động. Cái gì #!%#@! microsoft
Sam B

IF EXISTẩn Access is deniedvà các tình huống khác. Tôi đã thêm những thứ như thế DIR c:\deletemevà kiểm tra erros trước mọi thứ.
it3xl

Việc mở trình khám phá cửa sổ trong một thư mục con hoặc trình duyệt khác gây ra lỗi này hai lần liên tiếp. Vì vậy, hãy chắc chắn rằng bạn hỏi nó một lần thứ ba (mà thực sự làm việc)
Jake Stevens-Haas

Trên thực tế, nó đã xảy ra hai lần liên tiếp đối với tôi mà không có bất kỳ điều gì mở hoặc vấn đề về quyền. Kỷ lục của tôi là bảy lần. Đề xuất cách tiếp cận của @ BoffinbraiN.
Jake Stevens-Haas


20

Tôi vừa gặp phải vấn đề tương tự và nó liên quan đến một số tệp bị mất hoặc bị hỏng. Để khắc phục sự cố, chỉ cần chạy đĩa kiểm tra:

chkdsk /F e:

Điều này có thể được chạy từ hộp cửa sổ tìm kiếm hoặc từ lời nhắc cmd. Bản /Fsửa lỗi sẽ khắc phục mọi sự cố mà nó tìm thấy, chẳng hạn như khôi phục các tệp. Khi quá trình này chạy xong, bạn có thể xóa các tệp và thư mục như bình thường.


Tuyệt vời, tôi đã cố gắng từ nửa giờ
trex

Điều này tìm thấy một số tệp ẩn trong thư mục của tôi, sau đó tôi có thể xóa. Thực sự khó chịu 😑
Đánh bại

7

Tôi đã gặp sự cố tương tự, đã cố gắng xóa một thư mục trống qua windows explorer. Đã hiển thị cho tôi lỗi không trống, vì vậy tôi nghĩ rằng tôi đã thử nó qua cmd quản trị, nhưng không có câu trả lời nào ở đây giúp ích.

Sau khi tôi chuyển một tệp vào thư mục trống. Tôi đã có thể xóa thư mục không trống


1
Hãy viết nó trong bình luận.
Virb

Hấp dẫn. Tuy nhiên, có lẽ không liên quan đến kịch bản OP.
Harry Johnston

Thánh thần ơi, đây thực sự là suy nghĩ duy nhất hoạt động trong tất cả các giải pháp khác!
Seega

3

Như @gfullam đã nêu trong một nhận xét cho câu trả lời của @ BoffinbraiN, chính <dir>bạn đang xóa có thể không phải là thư mục chứa tệp: có thể có các thư mục con trong <dir>đó nhận được thông báo "Thư mục không trống" và giải pháp duy nhất sau đó sẽ là lặp lại đệ quy qua các thư mục, xóa thủ công tất cả các tệp chứa chúng ... Cuối cùng tôi quyết định sử dụng một cổng rmtừ UNIX. rm.exeđi kèm với Git Bash, MinGW, Cygwin, GnuWin32 và các ứng dụng khác. Bạn chỉ cần có thư mục mẹ của nó trong PATH và sau đó thực thi như bạn làm trong hệ thống UNIX.

Ví dụ về tập lệnh hàng loạt:

set PATH=C:\cygwin64\bin;%PATH%
rm -rf "C:\<dir>"

2

Những gì làm việc cho tôi là sau đây. Tôi có vẻ như lệnh RMDir sẽ đưa ra "Thư mục không trống" gần như mọi lúc ...

:Cleanup_Temporary_Files_and_Folders

Erase /F /S /Q C:\MyDir

RMDir /S /Q C:\MyDir
If  Exist  C:\MyDir  GoTo Cleanup_Temporary_Files_and_Folders

2

Tôi có "C: \ Users \ Tên người dùng \ OneDrive \ Fonts", được mklink'ed (/ D) thành "C: \ Windows \ Fonts" và tôi gặp vấn đề tương tự. Trong trường hợp của tôi

cd "C: \ Users \ Tên người dùng \ OneDrive"

Phông chữ rd / s

Y (để xác nhận hành động)

đã giúp tôi. Tôi hy vọng, nó cũng giúp bạn; D


2
Thêm / q để tránh yêu cầu xác nhận khi chạy hàng loạt.
Jonathan Rosenne

1

Tôi là trường hợp của tôi, tôi vừa chuyển thư mục vào thư mục gốc như vậy.

move <source directory> c:\

Và sau đó chạy lệnh xóa thư mục

rmdir c:\<moved directory> /s /q

2
rmdir c:\<moved directory> /s /qlà câu trả lời đúng
lalengua

1
Nó KHÔNG phải là câu trả lời chính xác. xóa một thư mục trong thư mục gốc có thể gây ra cùng một thông báo: thư mục không trống.
Gangnus

Tôi biết đây là một chủ đề cũ. Chỉ muốn nói điều này làm việc cho tôi ...
Manuel Rivera

1

Lý do rd /stừ chối xóa một số tệp nhất định rất có thể là do các thuộc tính tệp SN SÀNG trên các tệp trong thư mục.

Cách thích hợp để khắc phục điều này, trước tiên hãy đảm bảo bạn đặt lại các thuộc tính trên tất cả các tệp:

attrib -r %directory% /s /d
rd /s %directory%

Có thể có những thứ khác như tệp ẩn hoặc tệp hệ thống, vì vậy nếu bạn muốn chơi nó an toàn:

attrib -h -r -s %directory% /s /d
rd /s %directory%

0

Tương tự như câu trả lời của Harry Johnston, tôi lặp lại cho đến khi nó hoạt động.

set dirPath=C:\temp\mytest
:removedir
if exist "%dirPath%" (
    rd /s /q "%dirPath%" 
    goto removedir
)

0

Windows đôi khi bị "hỏng do thiết kế", vì vậy bạn cần tạo một thư mục trống, sau đó nhân bản "thư mục bị hỏng" với "thư mục trống" với chế độ sao lưu.

robocopy - cmd copy utility

/copyall - copies everything
/mir deletes item if there is no such item in source a.k.a mirrors source with
destination
/b works around premissions shenanigans

Tạo en dir trống như thế này:

mkdir empty

ghi đè thư mục bị hỏng bằng trống như thế này:

robocopy /copyall /mir /b empty broken

và sau đó xóa thư mục đó

rd broken /s
rd empty /s

Nếu điều này không hữu ích, hãy thử khởi động lại ở "chế độ khôi phục với dấu nhắc lệnh" bằng cách giữ phím shift khi nhấp vào khởi động lại và cố gắng chạy lại các lệnh này trong chế độ khôi phục


Có, tôi nghĩ Robocopy sẽ hoạt động trong kịch bản OP, vì nó tự động thử lại các hoạt động không thành công. Bạn có thể muốn chỉ định /W:0để tránh sự chậm trễ không cần thiết. Bạn có thể không muốn /bvì điều đó yêu cầu đặc quyền quản trị. Chế độ khôi phục không liên quan đến câu hỏi này, bởi vì chúng ta đang nói về một tập lệnh hàng loạt, không phải ai đó đang cố gắng xóa một thư mục theo cách thủ công.
Harry Johnston

-1

Tôi có thể nghĩ đến những nguyên nhân có thể xảy ra sau:

  1. có các tệp hoặc thư mục con cần quyền cao hơn
  2. có các tệp đang được sử dụng, không chỉ bởi WSearch, mà có thể bởi trình quét vi rút của bạn hoặc bất kỳ thứ gì khác

Đối với 1.) bạn có thể thử runas /user:Administratorđể có được các đặc quyền cao hơn hoặc khởi động tệp hàng loạt với tư cách quản trị viên thông qua menu ngữ cảnh. Nếu điều đó không hữu ích, thậm chí có thể quản trị viên không có quyền. Sau đó, bạn cần phải tiếp nhận quyền sở hữu của thư mục.

Đối với 2.) tải xuống Process Explorer , nhấp Find/Find handle or DLL...hoặc nhấn Ctrl+F, nhập tên của thư mục và tìm xem ai sử dụng nó. Đóng ứng dụng sử dụng thư mục, nếu có thể.


Các máy bị vô hiệu hóa tài khoản quản trị. Tôi đang ở trong nhóm quản trị viên nhưng tôi không biết mật khẩu quản trị viên. Bất kỳ đề xuất nào khác để giải quyết vấn đề về quyền? Ai đó đã đề cập đến việc gọi một chương trình khác từ hàng loạt (như vba).
Mayhem

@Mayhem: nhận được quyền khá khó ... Chúng tôi có thể sẽ cần khai thác một lỗi trong Windows để thực hiện điều đó mà không cần mật khẩu.
Thomas Weller
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.