Hapus folder di Windows sepenuhnya menggunakan baris perintah

57

Saya perlu menghapus satu folder yang berisi folder lain dan file di dalamnya. Saya mencoba deldan rmdirmemerintahkan tetapi kadang-kadang gagal dengan beberapa baris kesalahan:[PATH]: The directory isn't empty.

Apakah ada alternatif yang bagus?

Francesco Zanini
sumber
Saya telah mengalami ketidakkonsistenan dalam apakah rmdir dengan flag yang sesuai menghilangkan semuanya dalam pohon direktori (dan / atau pohon itu sendiri), dan satu-satunya penjelasan yang mungkin saya miliki adalah apa yang dikatakan Harry Johnston.
r_alex_hall

Jawaban:

15

Ini sering terjadi pada saya dengan skrip build otomatis saya.

Saya kira alasannya mungkin beberapa aplikasi yang memiliki file terbuka di direktori itu dengan "share delete". Yaitu aplikasi ini memungkinkan penghapusan file (itulah sebabnya saya pikir panggilan DeleteFile tidak gagal), tetapi file hanya akan hilang setelah aplikasi mengatakan telah menutup itu menangani.

Itu berarti file mungkin masih ada ketika rmdirperintah mencoba untuk menghapus folder, maka pesan kesalahan. Segera setelah itu, aplikasi mengatakan akan menutup itu menangani, file tersebut akan hilang, dan ketika Anda memeriksa folder untuk melihat file yang rmdirsedang dibicarakan itu akan kosong.

Setidaknya itu teoriku.

Solusi yang diusulkan oleh Harry Johnston terlihat bagus. Hanya saya yang akan menyisipkan jeda di antara rmdirperintah. Tentu saja Windows tidak memiliki perintah "pause" yang dapat skrip (koreksi: versi Windows kuno tidak, yang lebih baru - lihat komentar). Tetapi jika granularity detik sudah cukup, seseorang dapat menggunakan pinguntuk membuat jeda:

ping -n {desired_delay_in_seconds + 1} 127.0.0.1 >nul

Jadi totalnya:

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}
Paul Groke
sumber
Dalam pengalaman saya, jeda tidak pernah diperlukan, tetapi YMMV. (Tentu saja jika benar-benar ada aplikasi lain dalam permainan, lebih baik untuk mengidentifikasinya dan secara eksplisit menunggu sampai keluar jika memungkinkan.)
Harry Johnston
Yah ... Saya menerapkan retry-loop 10x dengan penundaan satu detik per coba lagi. Bekerja sekarang. Saya tidak akan mencoba untuk menghapus jeda, hanya untuk melihatnya gagal lagi :-) Tentu saja itu tidak berarti itu perlu. Hanya ekstra hati-hati.
Paul Groke
2
OT: Ini sebabnya saya benci windows. Semuanya sangat sulit. rm -rf /directory/harus bersifat global pada semua sistem operasi.
2
Sebenarnya ada semacam perintah "jeda"; untuk menjeda tiga detik, Anda dapat menggunakan ini:timeout /t 3
r_alex_hall
@r_alex_hall Memang (tetapi hanya dari Vista dan seterusnya, XP dan sebelumnya tidak memiliki pauseperintah).
misha256
57

Mencoba:

rmdir /S your_directory

atau:

rmdir /S /Q your_directory 

untuk melewati pesan konfirmasi.

AndrewQ
sumber
1
Saya sudah mencoba opsi ini tetapi ketika saya menulis deldan rmdirtidak bertanya apa-apa, mereka hanya mengirimkan beberapa baris seperti yang ada di deskripsi.
Francesco Zanini
2
rmdir /sakan menghapus apa pun yang mungkin untuk dihapus. Anda mungkin memiliki file yang dikunci oleh program, file read-only atau file yang Anda perlu akses administratif untuk menghapus. Tidak ada satu perintah pun yang akan menangani semua situasi itu untuk Anda
nvuono
Jika Anda masih mendapatkan pesan kesalahan, coba dengan PowerShell: cmdlet Remove-Item itu sedikit lebih kuat daripada rmdir.
AndrewQ
1
rmdir / S <directory> Menghapus direktori dan subfoler dan direktori. Itu juga bertanya Apakah Anda yakin. Di Windows 10. Terima kasih
Jasmeet
1
@r_alex_hall RMDIR / s memang menghapus file dalam direktori. Tapi DEL / s hanya akan menghapus file dan menyimpan direktori, itulah sebabnya RMDIR adalah pilihan yang lebih baik
JCH2k
11

Anda mungkin memiliki beberapa file yang hanya bisa dibaca, Anda dapat menggunakan opsi del / F untuk menghilangkannya

     del /S /F your_directory
     rmdir your_directory

Anda juga dapat memiliki beberapa file tersembunyi dan jika Anda benar-benar yakin ingin menghapusnya, maka Anda dapat melakukannya menggunakan ini

     del /S /F /AH your_directory
     rmdir your_directory

Jika ini masih gagal, maka Anda tidak memiliki izin untuk menghapus beberapa file, atau beberapa file masih digunakan.

sgmoore
sumber
Ini seharusnya jawaban yang benar!
jdhao
4

Saya percaya ada bug di Windows 7 (dan mungkin versi lain) yang terkadang menyebabkan gejala ini; atau mungkin ada bug dalam perangkat lunak pihak ketiga. (Apakah Anda memiliki Symantec Endpoint Protection diinstal secara kebetulan?)

Lagi pula, saya sudah sering menemukannya. Dalam kebanyakan kasus, masalah dapat diselesaikan dengan menjalankan rd /s /qdua atau tiga kali berturut-turut.

Jika ini dalam file batch, Anda dapat melakukan sesuatu seperti ini:

rd /s /q foo
if exist foo rd /s /q foo
if exist foo rd /s /q foo
if exist foo echo Help! & pause
Harry Johnston
sumber
Sepakat. Menggunakan rd / s foo - yang tanpa opsi / q silent - akan menghapus semua sub folder untuk Anda, tetapi Anda harus menjawab Y pada prompt, sehingga memerlukan file batch untuk dihadiri. Kurang ideal saya tahu.
Anthony
3

Gunakan delpada file di dalam, lalu rmdiruntuk menghapus folder.

Untuk menggunakan rmdirmetode ini untuk menghapus semua file juga, gunakan /Sswitch sebelum nama direktori, dan /Quntuk menekan meminta dihapus. Ini adalah cara terbaik untuk melakukannya, karena Anda tidak ketinggalan file apa pun. Berhati-hatilah menggunakan sakelar / Q, karena itu tidak akan memperingatkan Anda tentang atribut File Sistem atau Tersembunyi

Luke Kanada REINSTATE MONICA
sumber
2

Jika Anda menggunakan simpul, Anda bisa menggunakan dependensi rimraf seperti ini:

jalankan instal: npm install rimraf -g

hapus folder: rimraf SourceFolder

Ini membantu saya ketika mendapatkan kesalahan:

nama file sumber lebih besar dari yang didukung oleh sistem file

Dustin Spengler
sumber
0

Folder versi Windows yang lebih lama (DOS, Windows 95/98 / ME), DELTREEsetara dengan RMatau RMDIR. Saya menggunakan DELTREEworkstation Windows 7 saya dalam file batch baik-baik saja.

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.
Matahari
sumber
0

Saya pikir Anda bisa menggunakannya seperti ini:

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)"
Shubham Dwivedi
sumber
1
Selamat datang di SU! Kenapa saya downvoted? 1) Format buruk 2) Memberikan solusi penting yang sama seperti yang sudah diposting beberapa tahun yang lalu (selalu membaca solusi yang diposting sebelum memposting yang baru!) 3) Tidak cocok untuk pertanyaan (solusi Anda membuat ulang folder yang dihapus, yang tidak diminta).
zagrimsan