Bagaimana mengatasi kesalahan "Direktori tidak kosong" saat menjalankan perintah rmdir dalam skrip batch?


92

Saya membuat skrip batch dan bagian dari skrip mencoba untuk menghapus direktori dan semua sub-direktorinya. Saya mendapatkan pesan kesalahan intermiten tentang sub-direktori yang tidak kosong. Saya membaca satu artikel tentang pengindeksan sebagai pelakunya. Saya menonaktifkan WSearch tetapi akhirnya saya mendapatkan kesalahan lagi. Inilah perintahnya:

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

Dapatkah saya menanyakan beberapa info tentang jenis file yang memberi tahu Anda tentang windows? Bagi saya, ini hanya terjadi dengan file PDF segera setelah saya memindahkan / menyalinnya.
Jake Stevens-Haas

Jawaban:


88

Saya mengalami masalah yang sama seperti yang dikatakan Harry Johnston. rmdir /s /qakan mengeluh bahwa direktori tidak kosong meskipun /sdimaksudkan untuk melakukan pengosongan untuk Anda! Saya pikir itu bug di Windows, secara pribadi.

Solusi saya adalah untuk delsemua yang ada di direktori sebelum menghapus direktori itu sendiri:

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

(The 1>nulmenyembunyikan output standar delkarena jika tidak, itu mencantumkan setiap file yang dihapusnya.)


Saya mengalami skenario di mana beberapa sub direktori di dalamnya mydirmenghasilkan kesalahan "tidak kosong" yang sama. Jadi saya harus cdmasuk mydirdan menjalankan delfile di setiap direktori tersebut juga. Pada akhirnya itu berhasil, tetapi jika saya harus mengulangi proses itu untuk ketiga kalinya di sublevel lain, saya akan merasa sangat kalah.
gfullam

@gfullam Sejauh yang saya ingat, metode saya harus bekerja pada subdirektori rekursif juga, untuk kedalaman apa pun. Itulah yang del /sdilakukannya.
BoffinBrain

Menggunakan explorer (mungkin juga mkdir => NO!), Menambahkan folder (dan mengubah nama) menyelesaikan pekerjaan penghapusan hanya dengan menggunakan rd /s /q mydirperintah.
Master DJ

1
Oke, saya pikir menghapus windows dan pindah ke Linux jauh lebih mudah daripada rasa sakit ini :)
RajnishCoder

1
@RajnishCoder Hidup dengan Windows pada dasarnya adalah dunia solusi. Masalah khusus ini tidak seberapa dibandingkan dengan masalah lain dengan Windows 10!
BoffinBrain

47

Saya akrab dengan masalah ini. Solusi paling sederhana adalah mengulangi operasi secara bersyarat. Saya belum pernah melihatnya gagal dua kali berturut-turut - kecuali sebenarnya ada file terbuka atau masalah izin, jelas!

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

11
Sialan, ini tidak masuk akal namun berhasil. Apa #!% # @! microsoft
Sam B

IF EXISTmenyembunyikan Access is denieddan situasi lainnya. Saya telah menambahkan sesuatu seperti DIR c:\deletemedan pengecekan kesalahan sebelum semuanya.
it3xl

Membuka windows explorer di subdirektori atau browsing menyebabkan ini gagal dua kali berturut-turut. Jadi pastikan Anda menanyakannya untuk ketiga kalinya (yang benar-benar berhasil)
Jake Stevens-Haas

Sebenarnya ini telah terjadi dua kali berturut-turut untuk saya tanpa ada masalah terbuka atau masalah izin. Rekor saya tujuh kali. Rekomendasikan pendekatan @ BoffinbraiN.
Jake Stevens-Haas

Saya hanya menjalankan perintah pertama. Kemudian klik kanan folder> Properties> Hapus centang pada atribut 'Read-only'> Apply. Viola !, folder tersebut akhirnya menghilang.
steven7mwesigwa

21

Saya baru saja mengalami masalah yang sama dan itu berkaitan dengan beberapa file yang hilang atau rusak. Untuk memperbaiki masalah ini, jalankan saja check disk:

chkdsk /F e:

Ini dapat dijalankan dari kotak jendela pencarian atau dari prompt cmd. The /Fperbaikan masalah yang ditemukan, seperti memulihkan file. Setelah ini selesai dijalankan, Anda dapat menghapus file dan folder seperti biasa.


Sempurna, saya mencoba sejak setengah jam
trex

Ini menemukan beberapa file tersembunyi di folder saya, yang kemudian dapat saya hapus. Benar-benar buruk 😑
Kalahkan


7

Saya memiliki masalah yang sama, mencoba menghapus folder kosong melalui windows explorer. Menunjukkan kepada saya kesalahan yang tidak kosong, jadi saya pikir saya mencobanya melalui admin cmd, tetapi tidak ada jawaban di sini yang membantu.

Setelah saya memindahkan file ke folder kosong. Saya dapat menghapus folder yang tidak kosong


1
Silakan tulis di komentar.
Virb

Menarik. Mungkin tidak relevan dengan skenario OP.
Harry Johnston

Sialan, ini benar-benar satu-satunya pemikiran yang berhasil dari semua solusi lain ini!
Seega

3

Seperti yang @gfullam nyatakan dalam komentar untuk jawaban @ BoffinbraiN, yang <dir>Anda hapus sendiri mungkin bukan yang berisi file: mungkin ada subdirektori di dalamnya <dir>yang mendapatkan pesan "Direktori tidak kosong" dan satu-satunya solusi adalah berulang-ulang di atas direktori, secara manual menghapus semua file yang memuatnya ... Saya akhirnya memutuskan untuk menggunakan port rmdari UNIX. rm.exedilengkapi dengan Git Bash, MinGW, Cygwin, GnuWin32, dan lainnya. Anda hanya perlu memiliki direktori induknya di PATH Anda dan kemudian menjalankannya seperti yang Anda lakukan di sistem UNIX.

Contoh skrip batch:

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

2

Apa yang berhasil bagi saya adalah sebagai berikut. Sepertinya perintah RMDir akan mengeluarkan "Direktori tidak kosong" hampir sepanjang waktu ...

: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

Saya memiliki "C: \ Users \ User Name \ OneDrive \ Fonts", yang ditautkan (/ D) ke "C: \ Windows \ Fonts", dan saya mendapat masalah yang sama. Dalam kasus saya

cd "C: \ Users \ Nama Pengguna \ OneDrive"

rd / s Font

Y (untuk mengkonfirmasi tindakan)

membantuku. Saya harap, ini juga membantu Anda; D


2
Tambahkan / q untuk menghindari kebutuhan konfirmasi saat menjalankan batch.
Jonathan Rosenne

1

Saya kasus saya, saya baru saja memindahkan folder ke direktori root seperti itu.

move <source directory> c:\

Dan kemudian jalankan perintah untuk menghapus direktori

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

2
rmdir c:\<moved directory> /s /qadalah jawaban yang benar
lalengua

1
Ini BUKAN jawaban yang benar. menghapus folder di root dapat menyebabkan pesan yang sama: folder tidak kosong.
Gangnus

Saya tahu ini adalah utas lama. Hanya ingin mengatakan ini berhasil untuk saya ...
Manuel Rivera

1

Alasan rd /smenolak untuk menghapus file tertentu kemungkinan besar karena atribut file READONLY pada file di direktori.

Cara yang tepat untuk memperbaikinya adalah dengan memastikan Anda mengatur ulang atribut pada semua file terlebih dahulu:

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

Mungkin ada yang lain seperti file tersembunyi atau sistem, jadi jika Anda ingin bermain aman:

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

0

Mirip dengan jawaban Harry Johnston, saya berputar hingga berhasil.

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

0

Terkadang Windows "rusak karena desain", jadi Anda perlu membuat folder kosong, lalu mencerminkan "folder yang rusak" dengan "folder kosong" dengan mode cadangan.

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

Buat dir kosong seperti ini:

mkdir empty

timpa folder yang rusak dengan yang kosong seperti ini:

robocopy /copyall /mir /b empty broken

lalu hapus folder itu

rd broken /s
rd empty /s

Jika ini tidak membantu, coba mulai ulang dalam "mode pemulihan dengan prompt perintah" dengan menahan shift saat mengklik mulai ulang dan mencoba menjalankan perintah ini lagi dalam mode pemulihan


Ya, saya pikir Robocopy akan bekerja dalam skenario OP, karena secara otomatis mencoba lagi operasi yang gagal. Anda mungkin ingin menentukan /W:0untuk menghindari penundaan yang tidak perlu. Anda mungkin tidak mau /bkarena itu membutuhkan hak akses administratif. Mode pemulihan tidak relevan dengan pertanyaan ini, karena kita berbicara tentang skrip batch, bukan seseorang yang mencoba menghapus direktori secara manual.
Harry Johnston

-1

Saya dapat memikirkan kemungkinan penyebab berikut:

  1. ada file atau subdirektori yang membutuhkan izin lebih tinggi
  2. ada file yang sedang digunakan, tidak hanya oleh WSearch, tapi mungkin oleh pemindai virus Anda atau yang lainnya

Untuk 1.) Anda dapat mencoba runas /user:Administratoruntuk mendapatkan hak istimewa yang lebih tinggi atau memulai file batch sebagai administrator melalui menu konteks. Jika itu tidak membantu, bahkan mungkin administrator tidak memiliki hak. Kemudian Anda perlu mengambil alih kepemilikan direktori.

Untuk 2.) unduh Process Explorer , klik Find/Find handle or DLL...atau tekan Ctrl+F, ketik nama direktori dan cari tahu siapa yang menggunakannya. Tutup aplikasi yang menggunakan direktori, jika memungkinkan.


Mesin telah menonaktifkan akun admin. Saya berada di grup admin tetapi saya tidak mengetahui kata sandi administrator. Ada saran lain untuk mengatasi masalah izin? Seseorang menyebutkan memanggil program lain dari batch (seperti vba).
Mayhem

@ Mayhem: mendapatkan izin cukup sulit ... Kami mungkin memerlukan exploit untuk bug di Windows untuk melakukannya tanpa kata sandi.
Thomas Weller
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.