Cara menghapus file / subfolder di direktori tertentu pada command prompt di Windows


308

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?



Sungguh gila betapa sulitnya Windows membuat menghapus folder ... Atau membuat yang dimulai dengan titik ... Terima kasih Tuhan untuk integrasi Bash di Windows! rm -rf path\to\folderbekerja di Windows 10 (atau dapat berasal dari Git Bash ... apa pun yang Anda lakukan, coba saja!)
Stijn de Witt

Jawaban:


256

Anda dapat menggunakan skrip shell ini untuk membersihkan folder dan file dalam C:\Temp sumber :

del /q "C:\Temp\*"
FOR /D %%p IN ("C:\Temp\*.*") DO rmdir "%%p" /s /q

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


20
Saya mencobanya tetapi sayangnya file-file di mana tidak dihapus, hanya sub-folder yang dihapus. Misalnya saya punya folder bernama Test. Ini berisi 2 folder bernama "Ripon" & "Wasim" dan berisi file bernama "riponalwasim.txt". Subfolder Ripon dan Wasim telah dihapus tetapi riponalwasim.txt tidak dihapus.
Ripon Al Wasim

16
Gunakan tanda persentase tunggal jika Anda ingin menjalankan langsung dari command line misalnya%p
Alex

2
Sedih karena ini membutuhkan 2 baris, tetapi setidaknya itu berhasil! Saya bosan mencari "one-liner" yang berfungsi dan akan menggunakan yang ini, terima kasih!
nightcoder

2
Anda dapat menggunakan operator '&&' untuk menjalankan dua perintah dalam satu baris tanpa file bat (perhatikan '%' alih-alih '%%'). del / s / q "myfolder *" && UNTUK / D% p IN ("myfolder *") LAKUKAN rmdir "% p" / s / q
ravinsp

<for / F "delims =" %% i in ('dir / b / a-d') do (echo del "%% i" / q)> dapat membantu untuk file (cukup hapus gema itu)
grenix

340

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.

RMDIR "FOLDERNAME" /S /Q

Ini secara diam-diam menghapus folder dan semua file dan subfolder.


65
Ini tampaknya menghapus pathtofolder yang ingin dipertahankan OP.
Fuzz Evans

4
Ini akan menghapus folder itu sendiri, jadi Anda perlu menambahkan perintah lain: md FOLDERNAME(lihat jawaban dari @rakoczyn di bawah).
thdoan

4
Apa yang Anda maksud dengan "cadangan dibuat" di sini? Saya tidak dapat melihat apa pun yang akan membuat cadangan apa pun ...
Paul Groke

1
Direktori tidak kosong Pesan datang sebagai respons!
Jamshaid Kamran

10
Agar tidak menghapus folder itu sendiri, jadikan itu direktori saat ini sebelumnya, lalu gunakan "." sebagai FOLDERNAME. Menciptakannya kembali setelah itu tidak selalu sama karena ACL bisa hilang. cd "FOLDERNAME" RD . /S /Q
Moritz Keduanya

85

Solusi paling sederhana yang dapat saya pikirkan adalah menghapus seluruh direktori

RD /S /Q folderPath

Kemudian buat direktori ini lagi:

MD folderPath

5
bagaimana jika Anda mengizinkan untuk menghapus tetapi tidak membuat folder baru ?? Saya harap ini mungkin :)
Sandy

13
Ini adalah solusi yang buruk, karena ia memperkenalkan perlombaan pada sistem file untuk simpul direktori, yaitu perintah kedua dapat gagal jika dijalankan segera setelahnya.
Rok Strniša

22
Juga, solusi buruk jika direktori tersebut memiliki izin khusus yang baru saja Anda nuked ahem (whoops)
Immortal Blue

Jangan tertunda dengan respons: 'Direktori tidak kosong.',
Kieran Ryan

1
RD dan RMDIR adalah perintah yang sama dan karena Anda memposting jawaban ini 9 bulan setelah seseorang menyatakan jawaban yang sama, mengapa orang memberi Anda poin?
Beralih

51

Ini akan menghapus folder dan file dan meninggalkan folder di belakang.

pushd "%pathtofolder%" && (rd /s /q "%pathtofolder%" 2>nul & popd)

4
Bagi siapa pun yang tidak yakin tentang pendekatan ini: itu pasti tidak membuat kembali direktori. Tanpa 2>nul, ini menghasilkan "Proses tidak dapat mengakses file karena sedang digunakan oleh proses lain."
Rok Strniša

6
Saya benci bahwa Windows tidak dapat menghapus file dan folder yang digunakan oleh beberapa program. Dan saya suka Anda menggunakan itu untuk kebaikan Anda dalam one-liner ini.
andref

Jadi sihir uber ini adalah bagaimana kita mengosongkan folder di Windows ?? Impressive :)
mlvljr

3
@mlvljr Hanya jika Anda ingin menyimpan folder induk juga. RD /?akan menunjukkan kepada Anda cara sederhana untuk mengosongkan folder.
foxidrive

1
Ini bagus jika Anda perlu kembali ke lokasi awal Anda, jika tidak 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 menambahkan set p="mypath"di awal.
Amit Naidu

39
@ECHO OFF

SET THEDIR=path-to-folder

Echo Deleting all files from %THEDIR%
DEL "%THEDIR%\*" /F /Q /A

Echo Deleting all folders from %THEDIR%
FOR /F "eol=| delims=" %%I in ('dir "%THEDIR%\*" /AD /B 2^>nul') do rd /Q /S "%THEDIR%\%%I"
@ECHO Folder deleted.

EXIT

... menghapus semua file dan folder di bawah direktori yang diberikan, tetapi bukan direktori itu sendiri.


4
ini harus menjadi jawaban yang tepat .. cukup buat saja .. file deletemyfoldercontents.bat .. muncul di
jalurmu

3
Baris perintah DEL melewatkan opsi /Auntuk 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 dimodifikasi for /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 /Bmenampilkan semua direktori hanya dengan nama mereka. BTW: dirbukan nama yang baik untuk variabel lingkungan.
Mofi

1
tidak menghapus sub folder
RMiranda

1
@Riranda, dalam tes saya, tidak persis seperti yang diminta OP. Apakah Anda memiliki kasing yang tidak menghapus subfolder?
thepip3r

Apakah jawaban ini memenuhi persyaratan "mungkin ada kesalahan seperti 'file / folder ini sudah digunakan' ... ketika itu terjadi, itu harus terus dan lewati file / folder itu." ?
Peter Mortensen

30
CD [Your_Folder]
RMDIR /S /Q .

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, jadi RMDIRtidak akan berjalan jika CDperintah gagal (mis. Nama direktori salah ketik):

CD [Your_Folder] && RMDIR /S /Q .

Dari Referensi Baris Perintah Windows :

/ S: Menghapus pohon direktori (direktori yang ditentukan dan semua subdirektori, termasuk semua file).

/ Q: Menentukan mode diam. Tidak meminta konfirmasi ketika menghapus pohon direktori. (Perhatikan bahwa / q hanya berfungsi jika / s ditentukan.)


1
Ini sempurna untuk mengosongkan temp, tapi itu cd [Your_Folder]sangat kritis - saya harus ingat itu jadi saya tidak menghapus direktori itu sendiri ...
bijak

5
Ini solusi yang tepat. Tambahkan di &&antara perintah-perintah alih-alih jeda baris dan Anda aman dari CD yang gagal.
Moritz Keduanya

Ini adalah solusi sederhana dan benar. Bahkan bekerja dengan shell perintah Azure!
Philippe

solusi yang sangat buruk ... Saya misalnya perlu penghapusan baris perintah ini untuk pembaruan svn - Saya ingin menghapus semua file dan folder sebelum saya membuat pembaruan svn karena mungkin ada beberapa perubahan pada mesin tempat saya menggunakan ini, tetapi relevan hanya barang yang dicentang. Melakukan RMDIR / S / Q. juga menghapus tautan SVN dan karenanya membuat folder itu bukan folder svn lagi
Dominik Lemberger

Bagaimana ini berbeda dari empat jawaban sebelumnya?
Peter Mortensen

9

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:

RD /S /Q C:/folder_path/here

1
upvoted untuk menjadi satu-satunya untuk menjelaskan apa /Sdan /Qberarti
SourceVisor

2
Tidak rdsama dengan rmdirdan akan menghapus direktori itu sendiri dan bukan yang diinginkan OP.
WesternGun

Apakah jawaban ini memenuhi persyaratan "mungkin ada kesalahan seperti 'file / folder ini sudah digunakan' ... ketika itu terjadi, itu harus terus dan lewati file / folder itu."? Misalnya, apakah itu dibatalkan sepenuhnya alih-alih dilanjutkan?
Peter Mortensen

8

Saya menggunakan Powershell

Remove-Item c:\scripts\* -recurse

Ini akan menghapus isi folder, bukan folder itu sendiri.


jawaban rhellem baru-baru ini, tetapi itu adalah satu-satunya jawaban yang benar-benar akan melakukan ini untukku. (Menangkan 8.1, bukan karena pilihan)
philologon

2
Dari baris perintah batch:powershell -Command "Remove-Item 'PathToMyDirectory\*' -Recurse -Force"
Rosberg Linhares

Perhatikan bahwa "*" diperlukan atau itu akan menghapus folder.
mhenry1384

7

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:

pushd "%PathToFolder%" 2>nul && ( rd /Q /S "%PathToFolder%" 2>nul & popd )

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:

Sistem tidak mampu menemukan jalur yang ditentukan.

Pesan kesalahan ini ditekan dengan mengarahkannya 2>nulke 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 /Qdan /Smenghapus 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:

  1. 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.

  2. 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.

  3. 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 :

Proses tidak dapat mengakses file karena sedang digunakan oleh proses lain.

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>nuldari 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:\Tempdengan nama berbagi Tempdan menggunakan jalur UNC yang \\%COMPUTERNAME%\Temp\CleanTestditugaskan ke variabel lingkungan PathToFolderpada Windows 7. Jika direktori saat ini dalam menjalankan baris perintah adalah subdirektori dari lokal bersama folder diakses menggunakan jalur UNC, yaitu C:\Temp\CleanTest\Subfolder1, Subfolder1dihapus oleh RD , dan POPD berikutnya gagal diam-diam dalam membuat C:\Temp\CleanTest\Subfolder1lagi direktori saat ini sehingga Z:\CleanTesttersisa 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%.

@echo off
setlocal EnableExtensions DisableDelayedExpansion

rem Clean the folder for temporary files if environment variable
rem PathToFolder is not defined already outside this batch file.
if not defined PathToFolder set "PathToFolder=%TEMP%"

rem Remove all double quotes from folder path.
set "PathToFolder=%PathToFolder:"=%"

rem Consisted the folder path only of double quotes?
if not defined PathToFolder goto EndCleanFolder

rem Remove a backslash at end of folder path.
if "%PathToFolder:~-1%" == "\" set "PathToFolder=%PathToFolder:~0,-1%"

rem Consisted folder path only of a backslash (with one or more double quotes)?
if not defined PathToFolder goto EndCleanFolder

rem Delete all files in specified folder including files with hidden
rem or read-only attribute set, except the files currently opened by
rem a running process which prevents deletion of the file while being
rem opened by the application, or on which the current user has not
rem the required permissions to delete the file.
del /A /F /Q "%PathToFolder%\*" >nul 2>nul

rem Delete all subfolders in specified folder including those with hidden
rem attribute set recursive with all files and subfolders, except folders
rem being the current directory of any running process which prevents the
rem deletion of the folder and all folders above, folders containing a file
rem opened by the application which prevents deletion of the file and the
rem entire folder structure to this file, or on which the current user has
rem not the required permissions to delete a folder or file in folder tree
rem to delete.
for /F "eol=| delims=" %%I in ('dir "%PathToFolder%\*" /AD /B 2^>nul') do rd /Q /S "%PathToFolder%\%%I" 2>nul

:EndCleanFolder
endlocal

File batch pertama memastikan bahwa variabel lingkungan PathToFolderbenar-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 nilai PathToFolderdigabungkan dengan string lain selama eksekusi file batch.

Penting adalah dua baris:

del /A /F /Q "%PathToFolder%\*" >nul 2>nul
for /F "eol=| delims=" %%I in ('dir "%PathToFolder%\*" /AD /B 2^>nul') do rd /Q /S "%PathToFolder%\%%I" 2>nul

Perintah DEL digunakan untuk menghapus semua file di direktori yang ditentukan.

  • Opsi /Aini diperlukan untuk memproses semua file termasuk file dengan atribut tersembunyi yang akan diabaikan oleh DEL tanpa menggunakan opsi /A.
  • Opsi /Fini diperlukan untuk memaksa penghapusan file dengan set atribut read-only.
  • Opsi /Qini diperlukan untuk menjalankan penghapusan diam-diam dari beberapa file tanpa meminta pengguna jika beberapa file harus benar-benar dihapus.
  • >nuldiperlukan 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>nuldiperlukan 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 /Dtidak digunakan karena FOR mengabaikan dalam hal ini subdirektori dengan set atribut tersembunyi. Untuk alasan for /Fitu digunakan untuk menjalankan baris perintah berikut dalam proses perintah terpisah yang dimulai di latar belakang dengan %ComSpec% /c:

dir "%PathToFolder%\*" /AD /B 2>nul

Output DIR dalam format telanjang karena /Bentri direktori dengan atribut D, yaitu nama-nama semua subdirektori dalam direktori yang ditentukan independen pada atribut lain seperti atribut tersembunyi tanpa jalur. 2>nuldigunakan 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 mengeksekusi dirbaris 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 /Fmengabaikan baris kosong yang tidak muncul di sini karena DIR dengan opsi /Btidak 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 karena delims=itu digunakan untuk mendefinisikan daftar pembatas kosong untuk menonaktifkan perilaku pemisahan baris dan ditugaskan untuk variabel loop I,, 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 /?

5

Gunakan Notepad untuk membuat dokumen teks dan salin / tempel ini:

rmdir /s/q "%temp%"
mkdir "%temp%"

Pilih Simpan Sebagai dan nama file:

delete_temp.bat

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!


solusi yang cukup mudah dan bersih
Carlos Liu

4

Untuk menghapus file:

del PATH_TO_FILE

Untuk menghapus folder dengan semua file di dalamnya:

rmdir /s /q PATH_TO_FOLDER

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:

del /q PATH_TO_FOLDER\*.*
for /d %i in (PATH_TO_FOLDER\*.*) do @rmdir /s /q "%i"

Ya ini benar. Harus dua langkah. Ini layak mendapatkan lebih banyak suara, karena itu menjelaskan mengapa, dibandingkan dengan jawaban yang lebih banyak dipilih di atas.
WesternGun

Baris perintah DEL melewatkan opsi /Auntuk menghapus juga file dengan set atribut tersembunyi dan opsi /Funtuk menghapus juga file dengan set atribut read-only dan tanda kutip ganda di sekitar argumen terakhir. Jadi del /A /F /Q "PATH_TO_FOLDER\*"akan lebih baik. Dan baris perintah FOR harus dimodifikasi for /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 /Bmenampilkan semua direktori PATH_TO_FOLDERhanya dengan nama mereka.
Mofi

Apa bedanya dengan (sebagian) jawaban sebelumnya?
Peter Mortensen

4

Anda dapat melakukannya dengan menggunakan perintah berikut untuk menghapus semua konten dan folder induk itu sendiri:

RMDIR [/S] [/Q] [drive:]path            

Bagaimana ini berbeda dari dua jawaban sebelumnya?
Peter Mortensen

Apakah jawaban ini memenuhi persyaratan "mungkin ada kesalahan seperti 'file / folder ini sudah digunakan' ... ketika itu terjadi, itu harus terus dan lewati file / folder itu." ?
Peter Mortensen

1

Saya mencoba beberapa pendekatan ini, tetapi tidak ada yang berhasil.

Saya menemukan pendekatan dua langkah ini di situs Windows Command Line :

forfiles /P %pathtofolder% /M * /C "cmd /c if @isdir==FALSE del @file"

forfiles /P %pathtofolder%  /M * /C "cmd /c if @isdir==TRUE rmdir /S /Q @file"

Ini bekerja persis seperti yang saya butuhkan dan seperti yang ditentukan oleh OP.


Dua baris perintah dapat digabungkan menjadi satu baris perintah: Opsi 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.
Mofi

Solusi ini adalah yang paling lambat dari semua solusi tidak lengkap yang diposting di sini karena memulai cmd.execontoh untuk setiap file dan setiap direktori di %pathtofolder%. Keuntungannya adalah bahwa FORFILES tidak mengabaikan direktori dengan tersembunyi set atribut sebagai UNTUK tidak.
Mofi

Re "Ini bekerja persis seperti yang saya butuhkan dan seperti yang ditentukan oleh OP." : Apakah Anda menguji persyaratan "mungkin ada kesalahan seperti 'file / folder ini sudah digunakan' ... ketika itu terjadi, seharusnya hanya melanjutkan dan melewati file / folder itu." ?
Peter Mortensen

0
@ECHO OFF
rem next line removes all files in temp folder
DEL /A /F /Q /S "%temp%\*.*"
rem next line cleans up the folder's content
FOR /D %%p IN ("%temp%\*.*") DO RD "%%p" /S /Q

Baris ke-2 akan menghapus file di setiap file dari semua folder di direktori temp Windows dan baris ke-3 membersihkan direktori termasuk isinya.
Robie

Baris perintah FOR harus dimodifikasi 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 /Bmenampilkan semua direktori %TEMP%hanya dengan nama mereka.
Mofi

Dokumentasi untuk DEL . Saya pikir Anda berada di jalur yang benar dengan / F: "Abaikan saja pengaturan read-only dan hapus saja (FORCE)"
Peter Mortensen

-10

Menggunakan:

del %pathtofolder%\*.*   /s /f  /q

Ini menghapus semua file dan subfolder %pathtofolder%, termasuk file hanya baca, dan tidak meminta konfirmasi.


9
Lawan saya, ini meninggalkan subfolder kosong di% pathtofolder%.
DH

35
Ini TIDAK menghapus subfolder di% pathtofolder%. Sayang sekali saya tidak punya reputasi untuk memilih jawaban salah ini
Vitalii Korsakov

1
Seperti yang ditunjukkan oleh Vitalii Korsakov, ini menghapus semua file dan file dari subdirektori, tetapi meninggalkan subdirektori di tempat yang diminta OP untuk dihapus juga.
Fuzz Evans

6
Meskipun perintah ini tidak meninggalkan folder kosong, itu jauh lebih dekat dengan apa yang diminta, daripada jawaban yang diterima. Tentu ini tergantung pada keadaan. Dalam kasus saya, saya lebih suka memiliki folder kosong, daripada file yang tersisa di direktori root.
MarcusUA

tetapi bagaimana kita dapat menghapus folder dan sub-folder yang terbuka di jaringan berbagi ketika mesin klien lain membuka drive berbagi memiliki akses tulis ke folder itu .. perintah psfile dan file net akan menutup sesi file tetapi sekali lagi setelah beberapa detik itu akan membuat secara otomatis sesi lain untuk pengguna itu di server ...
user1954762
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.