Apakah del / s (a) tidak berfungsi sama sekali (itu hanya tersedia dalam beberapa versi) atau (b) meninggalkan direktori tingkat atas tetapi menghapus semua yang ada di bawahnya atau (c) meninggalkan semua direktori sambil menghapus semua file?
Berkumandang
@ Harun, jawab c, Anda perlu menggunakan rmdir / s untuk menghapus direktori dan file.
Wedge
31
Bukankah itu benar-benar format c:pemasangan Linux? Saya bercanda tentu saja.
Basile Starynkevitch
Jawaban:
694
RMDIR atau RD jika Anda menggunakan Command Prompt (cmd.exe) klasik:
rd /s /q "path"
RMDIR [/ S] [/ Q] [drive:] path
RD [/ S] [/ Q] [drive:] path
/ S Menghapus semua direktori dan file di direktori yang ditentukan selain direktori itu sendiri. Digunakan untuk menghapus pohon direktori.
/ Q mode Diam, jangan tanya apakah ok untuk menghapus pohon direktori dengan / S
Jika Anda menggunakan PowerShell Anda dapat menggunakan Remove-Item(yang alias ke del, erase, rd, ri, rmdan rmdir) dan mengambil -Recurseargumen yang dapat disingkat untuk-r
Perlu ditunjukkan bahwa untuk sejumlah besar file, rmdir / s / q biasanya jauh lebih cepat daripada operasi "select dir, shift + delete" yang setara di explorer.
Wedge
9
Ini tidak menghapus file, seperti rm -rf, dan juga mengembalikan nilai bukan nol ketika direktori tidak ada, jadi rd /s /q foo && echo "yay"akan gagal jika direktori "foo" tidak ada.
Dirk Groeneveld
17
Bagaimana jika dir. tidak kosong dan beberapa file mendapatkan Access is denieddan yang lainnya The process cannot access the file because it is being used by another process?
Eugene
6
Saya baru saja mencoba ini dalam tujuh dan Anda perlu melakukan / S dan / Q (topi)
ford prefek
2
Bingung di sini. Saya tahu bahwa saya mencoba perintah ini dan tidak berfungsi jika ada file di pohon direktori; sekarang saya kembali dan. . . ajaibnya itu tampaknya berhasil. Apakah ada orang lain yang mengalami perilaku tidak konsisten dengan ini ?!
Pahlawanku! Dan satu tip: Anda membuat folder kosong Anda di C: \ kosong, lalu sekali di dalam setiap folder gila, Anda bisa melakukannyarobocopy /mir c:\empty .
Léon Pelletier
Yang takeownmembantu saya ketika saya menyalin folder dari sistem Linux dengan rsync karena kesalahan dan saya tidak memiliki hak untuk menghapus folder itu ... Bahkan robocopy tidak berfungsi. Terima kasih
Jarda
1
Jawaban yang sangat bagus Berhasil. (semua jawaban lain pada halaman tidak). Tapi cacl sudah usang. Mungkinkah membuat jawaban kontemporer? Varian kedua sudah berfungsi dan tidak usang.
Gangnus
Ini tidak melakukan apa pun untuk saya. Bisakah seseorang tolong jelaskan bagaimana itu seharusnya bekerja? (robocopy) - Mungkin menghapus isi folder, tetapi bukan folder itu sendiri
Ralf
114
RMDIR [/S] [/Q] [drive:]path
RD [/S] [/Q] [drive:]path
/S Menghapus semua direktori dan file di direktori yang ditentukan selain direktori itu sendiri. Digunakan untuk menghapus pohon direktori.
/Q Mode diam, jangan tanya apakah ok untuk menghapus pohon direktori dengan /S
Jawaban yang diterima sangat bagus, tetapi dengan asumsi Anda telah menginstal Node, Anda dapat melakukan ini lebih tepat dengan perpustakaan simpul "rimraf", yang memungkinkan pola globbing. Jika Anda sering menggunakan ini (saya lakukan), cukup instal secara global.
yarn global add rimraf
lalu, misalnya, pola yang saya gunakan terus-menerus:
rimraf .\**\node_modules
atau untuk one-liner yang memungkinkan Anda menghindari instalasi global, tetapi yang sedikit lebih lama untuk pengunduhan paket dinamis:
bekerja untuk saya dalam kombinasi w / rmdir / s / q karena beberapa file terkunci dan rmdir akan gagal pada mereka. del / foldername nuked file yang terkunci yang kemudian memungkinkan rmdir untuk menyingkirkan dir root. Bagus.
Ada tiga skenario di mana rm -rfbiasanya digunakan di mana ia diharapkan untuk kembali 0:
Jalur yang ditentukan tidak ada.
Path yang ditentukan ada dan merupakan direktori.
Path yang ditentukan ada dan merupakan file.
Saya akan mengabaikan hal izin keseluruhan, tetapi tidak ada yang menggunakan izin atau mencoba untuk menolak akses tulis sendiri pada hal-hal di Windows (OK, itu dimaksudkan untuk menjadi lelucon ...).
Pertama set ERRORLEVELke 0 dan kemudian hapus path hanya jika ada, menggunakan perintah yang berbeda tergantung pada apakah itu direktori atau tidak. IF EXISTtidak diatur ERRORLEVELke 0 jika jalur tidak ada, jadi pengaturan ERRORLEVELke 0 pertama diperlukan untuk mendeteksi kesuksesan dengan cara yang meniru rm -rfpenggunaan normal . Menjaga RDdengan IF EXISTitu diperlukan karena RD, tidak seperti rm -f, akan membuat kesalahan jika target tidak ada.
Cuplikan skrip berikut mengasumsikan bahwa DELPATH sudah diprioritaskan. (Ini aman ketika Anda melakukan sesuatu seperti SET DELPATH=%1. Cobalah menempatkan ECHO %1dalam .cmddan lewat itu argumen dengan ruang di dalamnya dan melihat apa yang terjadi untuk diri sendiri). Setelah cuplikan selesai, Anda dapat memeriksa kegagalan dengan IF ERRORLEVEL 1.
: # Determine whether we need to invoke DEL or RD or do nothing.
SET DELPATH_DELMETHOD=RD
PUSHD %DELPATH% 2>NUL
IF ERRORLEVEL 1 (SET DELPATH_DELMETHOD=DEL) ELSE (POPD)
IF NOT EXIST %DELPATH% SET DELPATH_DELMETHOD=NOOP
: # Reset ERRORLEVEL so that the last command which
: # otherwise set it does not cause us to falsely detect
: # failure.
CMD /C EXIT 0
IF %DELPATH_DELMETHOD%==DEL DEL /Q %DELPATH%
IF %DELPATH_DELMETHOD%==RD RD /S /Q %DELPATH%
Intinya adalah, semuanya lebih sederhana ketika lingkungan hanya sesuai dengan POSIX. Atau jika Anda menginstal MSYS minimal dan gunakan saja.
Anda dapat menginstal GnuWin32 dan menggunakan perintah * nix secara native di windows. Saya menginstal ini sebelum saya menginstal apa pun pada salinan windows minty segar. :)
GUNAKAN RISIKO ANDA SENDIRI. INFORMASI YANG DISEDIAKAN 'APA ADANYA'. TIDAK DIUJI SECARA EXTENSIVELY.
Klik kanan ikon Windows (biasanya kiri bawah)> klik "Windows PowerShell (Admin)"> gunakan perintah ini (dengan hati-hati, Anda dapat dengan mudah menghapus semua file Anda jika Anda tidak hati-hati):
rd -r -include *.* -force somedir
Dimana somedir direktori tidak kosong yang ingin Anda hapus.
Perhatikan bahwa dengan disk yang dilampirkan eksternal, atau disk dengan masalah, Windows terkadang berperilaku aneh - tidak kesalahan dalam menghapus (atau upaya penyalinan), namun direktori tidak dihapus (atau tidak disalin) seperti yang diperintahkan. (Saya menemukan bahwa dalam kasus ini, setidaknya bagi saya, perintah yang diberikan oleh @n_y dalam jawabannya akan menghasilkan kesalahan seperti 'get-childitem: File atau direktori rusak dan tidak dapat dibaca.' Sebagai hasilnya di PowerShell)
TERLAMBAT TAPI JAWABAN PENTING untuk siapa saja yang mengalami masalah dalam menginstal paket npm di mesin windows dan jika Anda melihat kesalahan mengatakan " rm -rf..." perintah tidak ditemukan. Anda dapat menggunakan bash cli untuk menjalankan perintah rm di windows.
untuk pengguna npm, Anda dapat mengubah konfigurasi npm dengan npm config set script-shell "C:\Program Files\Git\bin\bash.exe"cara ini jika paket npm yang Anda coba instal memiliki skrip post install yang menggunakan rm -rfperintah, Anda akan dapat menjalankan rmperintah itu tanpa perlu mengubah apa pun dalam paket npm atau menonaktifkannya konfigurasi skrip instalasi pos. (Misalnya, styled-componentsgunakanrm perintah dalam skrip instal posting mereka)
Jika Anda hanya ingin menggunakan rmperintah, Anda dapat dengan mudah menggunakan bash dan meneruskan argumen.
Jadi ya, Anda dapat menggunakan perintah 'rm' di windows.
Coba kurangi panjang jalan. yaitu :: Ganti nama semua folder yang mengarah ke file tersebut ke nama sekecil mungkin. Ucapkan satu nama huruf. Terus ganti nama ke atas dalam hierarki folder. Dengan ini, Anda secara efektif mengurangi panjang jalur. Sekarang akhirnya coba hapus file itu segera.
format c:
pemasangan Linux? Saya bercanda tentu saja.Jawaban:
RMDIR atau RD jika Anda menggunakan Command Prompt (cmd.exe) klasik:
Jika Anda menggunakan PowerShell Anda dapat menggunakan
Remove-Item
(yang alias kedel
,erase
,rd
,ri
,rm
danrmdir
) dan mengambil-Recurse
argumen yang dapat disingkat untuk-r
sumber
rd /s /q foo && echo "yay"
akan gagal jika direktori "foo" tidak ada.Access is denied
dan yang lainnyaThe process cannot access the file because it is being used by another process
?admin:
Bekerja untuk apa saja termasuk file sys
EDIT: Saya benar-benar menemukan cara terbaik yang juga memecahkan masalah jalur file terlalu lama:
sumber
robocopy /mir c:\empty .
takeown
membantu saya ketika saya menyalin folder dari sistem Linux dengan rsync karena kesalahan dan saya tidak memiliki hak untuk menghapus folder itu ... Bahkan robocopy tidak berfungsi. Terima kasihRMDIR [/S] [/Q] [drive:]path
RD [/S] [/Q] [drive:]path
/S
Menghapus semua direktori dan file di direktori yang ditentukan selain direktori itu sendiri. Digunakan untuk menghapus pohon direktori./Q
Mode diam, jangan tanya apakah ok untuk menghapus pohon direktori dengan/S
sumber
Anda dapat menginstal cygwin, yang telah
rm
dan lainnyals
.sumber
Pergi ke jalan dan memicu perintah ini.
/ s: Menghapus direktori yang ditentukan dan semua subdirektori termasuk file apa pun. Gunakan / s untuk menghapus pohon.
/ q: Menjalankan rmdir dalam mode senyap. Menghapus direktori tanpa konfirmasi.
/? : Menampilkan bantuan di prompt perintah.
sumber
Untuk menghapus direktori (ada atau tidaknya) gunakan yang berikut:
sumber
rmdir /S /Q %DIRNAME%
sumber
Jawaban yang diterima sangat bagus, tetapi dengan asumsi Anda telah menginstal Node, Anda dapat melakukan ini lebih tepat dengan perpustakaan simpul "rimraf", yang memungkinkan pola globbing. Jika Anda sering menggunakan ini (saya lakukan), cukup instal secara global.
lalu, misalnya, pola yang saya gunakan terus-menerus:
atau untuk one-liner yang memungkinkan Anda menghindari instalasi global, tetapi yang sedikit lebih lama untuk pengunduhan paket dinamis:
sumber
Coba perintah ini:
sumber
rmdir / s dirname
sumber
Pertama, mari kita tinjau apa yang
rm -rf
dilakukan:Ada tiga skenario di mana
rm -rf
biasanya digunakan di mana ia diharapkan untuk kembali0
:Saya akan mengabaikan hal izin keseluruhan, tetapi tidak ada yang menggunakan izin atau mencoba untuk menolak akses tulis sendiri pada hal-hal di Windows (OK, itu dimaksudkan untuk menjadi lelucon ...).
Pertama set
ERRORLEVEL
ke 0 dan kemudian hapus path hanya jika ada, menggunakan perintah yang berbeda tergantung pada apakah itu direktori atau tidak.IF EXIST
tidak diaturERRORLEVEL
ke 0 jika jalur tidak ada, jadi pengaturanERRORLEVEL
ke 0 pertama diperlukan untuk mendeteksi kesuksesan dengan cara yang menirurm -rf
penggunaan normal . MenjagaRD
denganIF EXIST
itu diperlukan karenaRD
, tidak sepertirm -f
, akan membuat kesalahan jika target tidak ada.Cuplikan skrip berikut mengasumsikan bahwa DELPATH sudah diprioritaskan. (Ini aman ketika Anda melakukan sesuatu seperti
SET DELPATH=%1
. Cobalah menempatkanECHO %1
dalam.cmd
dan lewat itu argumen dengan ruang di dalamnya dan melihat apa yang terjadi untuk diri sendiri). Setelah cuplikan selesai, Anda dapat memeriksa kegagalan denganIF ERRORLEVEL 1
.Intinya adalah, semuanya lebih sederhana ketika lingkungan hanya sesuai dengan POSIX. Atau jika Anda menginstal MSYS minimal dan gunakan saja.
sumber
melalui Powershell
melalui Command Prompt
https://stackoverflow.com/a/35731786/439130
sumber
Inilah yang perlu Anda lakukan ...
Buat file batch dengan baris berikut
RMDIR /S %1
Simpan file batch Anda sebagai
Remove.bat
dan masukkanC:\windows
Buat kunci registri berikut
HKEY_CLASSES_ROOT\Directory\shell\Remove Directory (RMDIR)
Luncurkan
regedit
dan perbarui nilai defaultHKEY_CLASSES_ROOT\Directory\shell\Remove Directory (RMDIR)\default
dengan nilai berikut"c:\windows\REMOVE.bat" "%1"
Itu dia! Sekarang Anda dapat mengklik kanan direktori mana saja dan menggunakan fungsi RMDIR
sumber
Menggunakan Powershell 5.1
Ganti log dengan nama direktori yang ingin Anda hapus.
get-childitem mencari direktori anak-anak dengan nama secara rekursif dari jalur saat ini (.).
hapus-item menghapus hasilnya.
sumber
Anda dapat menginstal GnuWin32 dan menggunakan perintah * nix secara native di windows. Saya menginstal ini sebelum saya menginstal apa pun pada salinan windows minty segar. :)
sumber
GUNAKAN RISIKO ANDA SENDIRI. INFORMASI YANG DISEDIAKAN 'APA ADANYA'. TIDAK DIUJI SECARA EXTENSIVELY.
Klik kanan ikon Windows (biasanya kiri bawah)> klik "Windows PowerShell (Admin)"> gunakan perintah ini (dengan hati-hati, Anda dapat dengan mudah menghapus semua file Anda jika Anda tidak hati-hati):
Dimana
somedir
direktori tidak kosong yang ingin Anda hapus.Perhatikan bahwa dengan disk yang dilampirkan eksternal, atau disk dengan masalah, Windows terkadang berperilaku aneh - tidak kesalahan dalam menghapus (atau upaya penyalinan), namun direktori tidak dihapus (atau tidak disalin) seperti yang diperintahkan. (Saya menemukan bahwa dalam kasus ini, setidaknya bagi saya, perintah yang diberikan oleh @n_y dalam jawabannya akan menghasilkan kesalahan seperti 'get-childitem: File atau direktori rusak dan tidak dapat dibaca.' Sebagai hasilnya di PowerShell)
sumber
TERLAMBAT TAPI JAWABAN PENTING untuk siapa saja yang mengalami masalah dalam menginstal paket npm di mesin windows dan jika Anda melihat kesalahan mengatakan "
rm -rf...
" perintah tidak ditemukan. Anda dapat menggunakan bash cli untuk menjalankan perintah rm di windows.untuk pengguna npm, Anda dapat mengubah konfigurasi npm dengan
npm config set script-shell "C:\Program Files\Git\bin\bash.exe"
cara ini jika paket npm yang Anda coba instal memiliki skrip post install yang menggunakanrm -rf
perintah, Anda akan dapat menjalankanrm
perintah itu tanpa perlu mengubah apa pun dalam paket npm atau menonaktifkannya konfigurasi skrip instalasi pos. (Misalnya,styled-components
gunakanrm
perintah dalam skrip instal posting mereka)Jika Anda hanya ingin menggunakan
rm
perintah, Anda dapat dengan mudah menggunakan bash dan meneruskan argumen.Jadi ya, Anda dapat menggunakan perintah 'rm' di windows.
sumber
inilah yang bekerja untuk saya:
Coba kurangi panjang jalan. yaitu :: Ganti nama semua folder yang mengarah ke file tersebut ke nama sekecil mungkin. Ucapkan satu nama huruf. Terus ganti nama ke atas dalam hierarki folder. Dengan ini, Anda secara efektif mengurangi panjang jalur. Sekarang akhirnya coba hapus file itu segera.
sumber
Ada juga deltree jika Anda menggunakan versi windows yang lebih lama.
Saya sangat suka situs ini untuk menemukan perintah: SS64: Del - Hapus File
sumber
del / s / q direktoritelahdihapus
sumber