Katakanlah, ada variabel yang dipanggil %pathtofolder%
, karena membuatnya jelas itu adalah path lengkap folder.
Saya ingin menghapus setiap file dan subfolder di direktori ini, tetapi tidak pada direktori itu sendiri.
Tapi, mungkin ada kesalahan seperti 'file / folder ini sudah digunakan' ... ketika itu terjadi, seharusnya hanya melanjutkan dan melewati file / folder itu.
Apakah ada perintah untuk ini?
rm -rf path\to\folder
bekerja di Windows 10 (atau dapat berasal dari Git Bash ... apa pun yang Anda lakukan, coba saja!)Jawaban:
Anda dapat menggunakan skrip shell ini untuk membersihkan folder dan file dalam
C:\Temp
sumber :Buat file batch (katakanlah, delete.bat) yang berisi perintah di atas. Pergi ke lokasi di mana file delete.bat berada dan kemudian jalankan perintah: delete.bat
sumber
%p
rmdir
adalah perintah favorit saya sepanjang waktu untuk pekerjaan itu. Ini berfungsi untuk menghapus file dan folder besar dengan subfolder. Pencadangan tidak dibuat, jadi pastikan Anda telah menyalin file Anda dengan aman sebelum menjalankan perintah ini.Ini secara diam-diam menghapus folder dan semua file dan subfolder.
sumber
md FOLDERNAME
(lihat jawaban dari @rakoczyn di bawah).cd "FOLDERNAME"
RD . /S /Q
Solusi paling sederhana yang dapat saya pikirkan adalah menghapus seluruh direktori
Kemudian buat direktori ini lagi:
sumber
Ini akan menghapus folder dan file dan meninggalkan folder di belakang.
sumber
2>nul
, ini menghasilkan "Proses tidak dapat mengakses file karena sedang digunakan oleh proses lain."RD /?
akan menunjukkan kepada Anda cara sederhana untuk mengosongkan folder.CD mypath && RD /S .
cukup saja. Saya tidak suka bahwa Anda harus mengulangi jalan Anda dua kali, karena jalan yang panjang menjadi sulit untuk dibaca. Jadi saya hanya akan menambahkanset p="mypath"
di awal.... menghapus semua file dan folder di bawah direktori yang diberikan, tetapi bukan direktori itu sendiri.
sumber
/A
untuk menghapus juga file dengan set atribut tersembunyi dan%dir%\*
harus diapit dengan tanda kutip ganda"%dir%\*"
agar berfungsi juga untuk direktori yang berisi spasi atau salah satu karakter ini&()[]{}^=;!'+,`~
. Dan baris perintah FOR harus dimodifikasifor /F "eol=| delims=" %%I in ('dir "%dir%\*" /AD /B 2^>nul') do rd /Q /S "%dir%\%%I"
karena FOR mengabaikan direktori dengan set atribut tersembunyi. DIR dengan opsi/AD /B
menampilkan semua direktori hanya dengan nama mereka. BTW:dir
bukan nama yang baik untuk variabel lingkungan.Anda akan mendapatkan pesan kesalahan, memberi tahu Anda bahwa perintah RMDIR tidak dapat mengakses folder saat ini, sehingga tidak dapat menghapusnya.
Perbarui :
Dari komentar yang bermanfaat ini (terima kasih kepada Moritz Keduanya ), Anda dapat menambahkan di
&&
antara, jadiRMDIR
tidak akan berjalan jikaCD
perintah gagal (mis. Nama direktori salah ketik):Dari Referensi Baris Perintah Windows :
sumber
cd [Your_Folder]
sangat kritis - saya harus ingat itu jadi saya tidak menghapus direktori itu sendiri ...&&
antara perintah-perintah alih-alih jeda baris dan Anda aman dari CD yang gagal.RD adalah singkatan dari REMOVE Directory.
/ S: Hapus semua file dan subfolder di samping folder itu sendiri. Gunakan ini untuk menghapus seluruh pohon folder.
/ T: Diam - jangan tampilkan konfirmasi YN
Contoh:
sumber
/S
dan/Q
berartird
sama denganrmdir
dan akan menghapus direktori itu sendiri dan bukan yang diinginkan OP.Saya menggunakan Powershell
Ini akan menghapus isi folder, bukan folder itu sendiri.
sumber
powershell -Command "Remove-Item 'PathToMyDirectory\*' -Recurse -Force"
Tidak ada jawaban yang diposting pada 2018-06-01, dengan pengecualian dari baris perintah tunggal yang diposting oleh foxidrive , benar-benar menghapus semua file dan semua folder / direktori di
%PathToFolder%
. Itulah alasan untuk memposting satu jawaban lagi dengan baris perintah tunggal yang sangat sederhana untuk menghapus semua file dan subfolder folder serta file batch dengan solusi yang lebih kompleks menjelaskan mengapa semua jawaban lain yang diposting pada 2018-06-01 menggunakan DEL dan FOR dengan RD gagal membersihkan folder sepenuhnya.Solusi baris perintah tunggal sederhana yang tentu saja dapat juga digunakan dalam file batch:
Baris perintah ini berisi tiga perintah yang dieksekusi satu demi satu.
Perintah pertama PUSHD mendorong jalur direktori saat ini di stack dan selanjutnya membuat
%PathToFolder%
direktori saat ini untuk menjalankan proses perintah.Ini berfungsi juga untuk jalur UNC secara default karena ekstensi perintah diaktifkan secara default dan dalam hal ini PUSHD membuat huruf drive sementara yang menunjuk ke sumber daya jaringan yang ditentukan dan kemudian mengubah drive dan direktori saat ini, menggunakan huruf drive yang baru ditetapkan.
PUSHD menampilkan pesan kesalahan berikut untuk menangani STDERR jika direktori yang ditentukan tidak ada sama sekali:
Pesan kesalahan ini ditekan dengan mengarahkannya
2>nul
ke perangkat NUL .Perintah berikutnya RD dijalankan hanya jika mengubah direktori saat ini untuk proses perintah saat ini ke direktori yang ditentukan berhasil, yaitu direktori yang ditentukan ada sama sekali.
Perintah RD dengan opsi
/Q
dan/S
menghapus direktori dengan tenang dengan semua subdirektori bahkan jika direktori yang ditentukan berisi file atau folder dengan atribut tersembunyi atau dengan set atribut read-only. Atribut sistem tidak pernah mencegah penghapusan file atau folder.Tidak dihapus adalah:
Folder digunakan sebagai direktori saat ini untuk setiap proses yang berjalan. Seluruh pohon folder ke folder tersebut tidak dapat dihapus jika folder digunakan sebagai direktori saat ini untuk setiap proses yang berjalan.
File saat ini dibuka oleh setiap proses yang berjalan dengan izin akses file yang ditetapkan pada file yang terbuka untuk mencegah penghapusan file saat dibuka oleh aplikasi / proses yang sedang berjalan. File yang terbuka seperti itu juga mencegah penghapusan seluruh pohon folder ke file yang dibuka.
File / folder di mana pengguna saat ini tidak memiliki izin yang diperlukan (NTFS) untuk menghapus file / folder yang mencegah juga penghapusan pohon folder ke file / folder ini.
Alasan pertama untuk tidak menghapus folder digunakan oleh baris perintah ini untuk menghapus semua file dan subfolder dari folder yang ditentukan, tetapi bukan folder itu sendiri. Folder ini dibuat sementara direktori saat ini untuk menjalankan proses perintah yang mencegah penghapusan folder itu sendiri. Tentu saja ini menghasilkan keluaran pesan kesalahan dengan perintah RD :
File adalah istilah yang salah di sini karena dalam kenyataannya folder sedang digunakan oleh proses lain, proses perintah saat ini yang dieksekusi perintah RD . Ya, dalam kenyataannya folder adalah untuk sistem file file khusus dengan direktori atribut file yang menjelaskan pesan kesalahan ini. Tapi saya tidak ingin masuk terlalu jauh ke manajemen sistem file.
Pesan kesalahan ini, seperti semua pesan kesalahan lainnya, yang dapat terjadi karena tiga alasan yang ditulis di atas, ditekan dengan mengalihkannya
2>nul
dari menangani STDERR ke perangkat NUL .Perintah ketiga, POPD , dijalankan secara terpisah dari nilai keluar dari perintah RD .
POPD memunculkan jalur direktori yang didorong oleh PUSHD dari tumpukan dan mengubah direktori saat ini untuk menjalankan proses perintah ke direktori ini, yaitu mengembalikan direktori awal saat ini. POPD menghapus huruf drive sementara yang dibuat oleh PUSHD jika ada lintasan folder UNC.
Catatan: POPD dapat secara diam-diam gagal mengembalikan direktori awal saat ini dalam kasus direktori saat ini awal adalah subdirektori dari direktori untuk membersihkan yang tidak ada lagi. Dalam kasus khusus ini
%PathToFolder%
tetap direktori saat ini. Jadi disarankan untuk menjalankan baris perintah di atas bukan dari subdirektori dari%PathToFolder%
.Satu fakta yang lebih menarik : Saya mencoba baris perintah juga menggunakan jalur UNC dengan berbagi direktori lokal
C:\Temp
dengan nama berbagiTemp
dan menggunakan jalur UNC yang\\%COMPUTERNAME%\Temp\CleanTest
ditugaskan ke variabel lingkunganPathToFolder
pada Windows 7. Jika direktori saat ini dalam menjalankan baris perintah adalah subdirektori dari lokal bersama folder diakses menggunakan jalur UNC, yaituC:\Temp\CleanTest\Subfolder1
,Subfolder1
dihapus oleh RD , dan POPD berikutnya gagal diam-diam dalam membuatC:\Temp\CleanTest\Subfolder1
lagi direktori saat ini sehinggaZ:\CleanTest
tersisa sebagai direktori saat ini untuk proses perintah berjalan. Jadi dalam kasus yang sangat, sangat khusus ini, drive sementara akan tetap ada hingga direktori saat ini diubah, misalnya dengancd /D %SystemRoot%
ke direktori lokal benar-benar ada. Sayangnya POPD tidak keluar dengan nilai lebih besar 0 jika gagal mengembalikan direktori awal saat ini sehingga tidak mungkin mendeteksi kondisi kesalahan yang sangat khusus ini hanya dengan menggunakan kode keluar POPD . Namun, dapat diduga bahwa tidak ada yang pernah mengalami kasus kesalahan yang sangat khusus ini karena jalur UNC biasanya tidak digunakan untuk mengakses file dan folder lokal.Untuk memahami perintah yang digunakan dengan lebih baik, buka jendela command prompt, jalankan di sana perintah berikut, dan baca bantuan yang ditampilkan untuk setiap perintah dengan sangat hati-hati.
pushd /?
popd /?
rd /?
Baris tunggal dengan banyak perintah menggunakan file batch Windows menjelaskan operator
&&
dan&
digunakan di sini.Selanjutnya mari kita lihat solusi file batch menggunakan perintah DEL untuk menghapus file
%PathToFolder%
dan FOR dan RD untuk menghapus subfolder di%PathToFolder%
.File batch pertama memastikan bahwa variabel lingkungan
PathToFolder
benar-benar didefinisikan dengan path folder tanpa tanda kutip ganda dan tanpa garis miring terbalik di akhir. Garis miring terbalik pada akhirnya tidak akan menjadi masalah, tetapi tanda kutip ganda dalam path folder bisa bermasalah karena nilaiPathToFolder
digabungkan dengan string lain selama eksekusi file batch.Penting adalah dua baris:
Perintah DEL digunakan untuk menghapus semua file di direktori yang ditentukan.
/A
ini diperlukan untuk memproses semua file termasuk file dengan atribut tersembunyi yang akan diabaikan oleh DEL tanpa menggunakan opsi/A
./F
ini diperlukan untuk memaksa penghapusan file dengan set atribut read-only./Q
ini diperlukan untuk menjalankan penghapusan diam-diam dari beberapa file tanpa meminta pengguna jika beberapa file harus benar-benar dihapus.>nul
diperlukan untuk mengarahkan output dari nama file yang ditulis untuk menangani STDOUT ke perangkat NUL yang tidak dapat dihapus karena file saat ini dibuka atau pengguna tidak memiliki izin untuk menghapus file.2>nul
diperlukan untuk mengarahkan output pesan kesalahan untuk setiap file yang tidak dapat dihapus dari menangani STDERR ke perangkat NUL .Perintah FOR dan RD digunakan untuk menghapus semua subdirektori dalam direktori yang ditentukan. Tetapi
for /D
tidak digunakan karena FOR mengabaikan dalam hal ini subdirektori dengan set atribut tersembunyi. Untuk alasanfor /F
itu digunakan untuk menjalankan baris perintah berikut dalam proses perintah terpisah yang dimulai di latar belakang dengan%ComSpec% /c
:Output DIR dalam format telanjang karena
/B
entri direktori dengan atributD
, yaitu nama-nama semua subdirektori dalam direktori yang ditentukan independen pada atribut lain seperti atribut tersembunyi tanpa jalur.2>nul
digunakan untuk mengarahkan output pesan kesalahan oleh DIR pada direktori tidak ditemukan dari menangani STDERR ke perangkat NUL .Operator pengalihan
>
harus melarikan diri dengan karakter tanda sisipan^
,, pada baris perintah FOR untuk diartikan sebagai karakter literal ketika penerjemah perintah Windows memproses baris perintah ini sebelum mengeksekusi perintah FOR yang mengeksekusidir
baris perintah tertanam dalam proses perintah terpisah dimulai. di latar belakang.UNTUK proses output yang ditangkap ditulis untuk menangani STDOUT dari proses perintah yang dimulai yang merupakan nama subdirektori tanpa path dan tidak pernah dilampirkan dalam tanda kutip ganda.
FOR dengan opsi
/F
mengabaikan baris kosong yang tidak muncul di sini karena DIR dengan opsi/B
tidak menampilkan baris kosong.FOR juga akan mengabaikan garis yang dimulai dengan titik koma yang merupakan akhir dari karakter garis. Nama direktori dapat dimulai dengan titik koma. Untuk alasan
eol=|
itu digunakan untuk mendefinisikan karakter bar vertikal sebagai karakter end-of-line yang tidak ada direktori atau file dalam namanya.FOR akan membagi garis menjadi substring menggunakan spasi dan tab horizontal sebagai pembatas dan akan menetapkan hanya string spasi / tab pertama yang dibatasi untuk variabel loop tertentu
I
. Perilaku pemisahan ini tidak diinginkan di sini karena nama direktori dapat berisi satu atau lebih spasi. Oleh karenadelims=
itu digunakan untuk mendefinisikan daftar pembatas kosong untuk menonaktifkan perilaku pemisahan baris dan ditugaskan untuk variabel loopI
,, selalu nama direktori lengkap.Command FOR menjalankan perintah RD untuk setiap nama direktori tanpa jalur yang menjadi alasan mengapa pada baris perintah RD jalur folder harus ditentukan sekali lagi yang digabungkan dengan nama subfolder.
Untuk memahami perintah yang digunakan dan cara kerjanya, buka jendela command prompt, jalankan di sana perintah berikut, dan baca seluruhnya semua halaman bantuan yang ditampilkan untuk setiap perintah dengan sangat hati-hati.
del /?
dir /?
echo /?
endlocal /?
for /?
goto /?
if /?
rd /?
rem /?
set /?
setlocal /?
sumber
Gunakan Notepad untuk membuat dokumen teks dan salin / tempel ini:
Pilih Simpan Sebagai dan nama file:
Simpan sebagai tipe: Semua file dan klik Savetombol.
Ini berfungsi pada semua jenis akun (administrator atau pengguna standar). Jalankan saja!
Saya menggunakan variabel sementara dalam contoh ini, tetapi Anda dapat menggunakan yang lain! PS: Hanya untuk OS Windows!
sumber
Untuk menghapus file:
Untuk menghapus folder dengan semua file di dalamnya:
Untuk menghapus semua file dari folder tertentu (tidak menghapus folder itu sendiri) agak rumit.
del /s *.*
tidak dapat menghapus folder, tetapi menghapus file dari semua subfolder. Jadi diperlukan dua perintah:sumber
/A
untuk menghapus juga file dengan set atribut tersembunyi dan opsi/F
untuk menghapus juga file dengan set atribut read-only dan tanda kutip ganda di sekitar argumen terakhir. Jadidel /A /F /Q "PATH_TO_FOLDER\*"
akan lebih baik. Dan baris perintah FOR harus dimodifikasifor /F "eol=| delims=" %%I in ('dir "PATH_TO_FOLDER\*" /AD /B 2^>nul') do rd /Q /S "PATH_TO_FOLDER\%%I"
karena FOR mengabaikan direktori dengan set atribut tersembunyi. DIR dengan opsi/AD /B
menampilkan semua direktoriPATH_TO_FOLDER
hanya dengan nama mereka.Anda dapat melakukannya dengan menggunakan perintah berikut untuk menghapus semua konten dan folder induk itu sendiri:
sumber
Saya mencoba beberapa pendekatan ini, tetapi tidak ada yang berhasil.
Saya menemukan pendekatan dua langkah ini di situs Windows Command Line :
Ini bekerja persis seperti yang saya butuhkan dan seperti yang ditentukan oleh OP.
sumber
forfiles /P "%pathtofolder%" /M * /C "%SystemRoot%\System32\cmd.exe /C if @isdir==FALSE (del /A /F @file) else rd /Q /S @file"
DEL/A
ditambahkan untuk menghapus juga file dengan atribut tersembunyi yang diatur karena jika tidak, DEL akan menampilkan pesan kesalahan yang tidak ditemukan untuk setiap file yang tersembunyi di%pathtofolder%
. Opsi DEL/F
ditambahkan untuk menghapus juga file dengan atribut read-only yang diatur%pathtofolder%
karena jika tidak, DEL akan menampilkan pesan kesalahan yang ditolak akses.cmd.exe
contoh untuk setiap file dan setiap direktori di%pathtofolder%
. Keuntungannya adalah bahwa FORFILES tidak mengabaikan direktori dengan tersembunyi set atribut sebagai UNTUK tidak.sumber
for /F "eol=| delims=" %%I in ('dir "%TEMP%\*" /AD /B 2^>nul') do rd /Q /S "%TEMP%\%%I"
karena FOR mengabaikan direktori dengan set atribut tersembunyi. DIR dengan opsi/AD /B
menampilkan semua direktori%TEMP%
hanya dengan nama mereka.Menggunakan:
Ini menghapus semua file dan subfolder
%pathtofolder%
, termasuk file hanya baca, dan tidak meminta konfirmasi.sumber