File batch. Hapus semua file dan folder dalam sebuah direktori

138

Saya ingin memiliki file batch yang akan menghapus semua folder dan file di folder cache saya untuk toolkit nirkabel saya.

Saat ini saya memiliki yang berikut:

cd "C:\Users\tbrollo\j2mewtk\2.5.2\appdb\RMS"
del *.db

Ini akan menghapus semua file .db di direktori RMS saya , namun saya ingin menghapus semuanya dari direktori ini. Bagaimana saya bisa melakukan ini?

pengguna69514
sumber
3
Ketik del /?saat diminta. Ini akan memberi Anda informasi tentang cara menggunakan alat tersebut. Untuk kasus ini, del *.* /sakan berhasil tetapi jangan melakukannya di direktori yang salah!
Michael Todd
35
rmdir /s /q c:\users\tbrollo\j2mewtk\2.5.2\appdb\RMS
forsvarir
Saya akan menyarankan per suara terbanyak untuk mengubah jawaban yang benar
GregM
6
Jawaban forsvarir juga menghapus RMSdirektori, yang mungkin bukan yang dimaksudkan. (Sebenarnya itu sering kali tidak saya inginkan, karena kemudian saya kehilangan stempel waktu asli dari direktori dan izin apa pun yang dimilikinya.) Lihat jawaban saya tentang cara menghapus semua konten direktori tetapi membiarkan direktori itu sendiri di tempat.
Bill_Stewart

Jawaban:

52

del *.*bukannya del *.db. Itu akan menghapus semuanya.

Jon Martin
sumber
58
Catatan: Jika Anda ingin melewati prompt "Apakah Anda yakin ingin menghapus ..." Anda harus menambahkan / FQ flags:del . /F /Q
Rhyuk
41
ini hanya menghapus file - bukan folder
icc97
54
Ini seharusnya tidak ditandai sebagai jawaban yang benar karena tidak menghapus folder (seperti yang dinyatakan dalam pertanyaan).
Bill_Stewart
160

Menggunakan:

  • Buat file batch

  • Salin teks di bawah ini ke dalam file batch

    set folder="C:\test"
    cd /d %folder%
    for /F "delims=" %%i in ('dir /b') do (rmdir "%%i" /s/q || del "%%i" /s/q)
    

Ini akan menghapus semua file dan folder.

GregM
sumber
4
Luar biasa, saya sedang mencari sesuatu untuk membersihkan file dan folder untuk pekerjaan batch bulanan dan ini berhasil.
Dave Harding
10
Pastikan direktori sudah ada sebelum Anda melakukan ini.
Bill_Stewart
2
Jika Anda memiliki karakter 'khusus' dalam nama file Anda, pertama-tama lakukan chcp 10000untuk mengubah encoding ke UTF-16
Demelziraptor
4
Hanya ingin menambahkan catatan ke komentar dari Bill_Stewart. Alasan Anda ingin memastikan bahwa direktori tersebut ada adalah bahwa jika tidak, itu akan menghapus direktori apa pun yang Anda masuki saat ini. Dalam kasus saya, itu adalah file batch yang telah saya kerjakan selama lebih dari 30 menit. :( Untung sisa folder berada di bawah kendali sumber.
helios456
4
@vee mengubah loop untuk (rmdir "%%i" /s/q 2>NUL || del "%%i" /s/q >NUL ) menekan pesan kesalahan dan penghapusan
Carl Walsh
34
IF EXIST "C:\Users\tbrollo\j2mewtk\2.5.2\appdb\RMS" (
    rmdir "C:\Users\tbrollo\j2mewtk\2.5.2\appdb\RMS" /s /q
)

Ini akan menghapus semuanya dari folder (dan folder itu sendiri).

infojolt
sumber
16
Saya pikir pertanyaannya adalah tentang mengosongkan direktori dari semua konten, tetapi tidak menghapus direktori itu sendiri.
Bill_Stewart
16

del *.*hanya akan menghapus file, bukan subdirektori. Untuk memasukkan konten direktori, Anda dapat menggunakan skrip ini:

@echo off
setlocal enableextensions
if {%1}=={} goto :HELP
if {%1}=={/?} goto :HELP
goto :START

:HELP
echo Usage: %~n0 directory-name
echo.
echo Empties the contents of the specified directory,
echo WITHOUT CONFIRMATION. USE EXTREME CAUTION!
goto :DONE

:START
pushd %1 || goto :DONE
rd /q /s . 2> NUL
popd

:DONE
endlocal

The pushdperubahan ke direktori yang ingin Anda hapus anak-anak. Kemudian ketika rddiminta untuk menghapus direktori saat ini dan semua sub direktori, penghapusan sub direktori berhasil, tetapi penghapusan direktori saat ini gagal - karena kita berada di dalamnya. Ini menghasilkan kesalahan yang 2> NULmenelan. (2 adalah aliran kesalahan).

Bill_Stewart
sumber
6
Saya bingung bagaimana tepatnya ini bekerja, jadi sebagai penjelasan untuk orang lain: pushd berubah ke direktori yang ingin Anda hapus anak-anaknya. Kemudian ketika rd meminta untuk menghapus direktori saat ini dan semua sub direktori, penghapusan sub direktori berhasil, tetapi penghapusan direktori saat ini gagal - karena kita berada di dalamnya. Ini menghasilkan kesalahan yang menelan 2> NUL. (2 adalah aliran kesalahan). Tuan Stewart yang sangat licik!
Kinetik
Oh, dan "setlocal enableextensions" mengaktifkan kemampuan untuk secara bersamaan mendorong direktori saat ini ke tumpukan, dan mengubah direktori. Ini tampaknya hanya diperlukan sebelum XP, karena di sana dan nanti defaultnya adalah Aktif.
Kinetik
Dapatkah Anda mengintegrasikan informasi dari komentar ke dalam jawaban (komentar dapat hilang kapan saja)? ( Tanpa menggunakan label "Edit:" "Update:" .)
Peter Mortensen
13

Saya baru saja mengumpulkan ini dari apa yang diposting morty346:

set folder="C:\test"
IF EXIST "%folder%" (
    cd /d %folder%
    for /F "delims=" %%i in ('dir /b') do (rmdir "%%i" /s/q || del "%%i" /s/q)
)

Ini menambahkan pemeriksaan cepat bahwa folder yang ditentukan dalam variabel ada terlebih dahulu, mengubah direktori ke folder, dan menghapus isinya.

Fantus_Longhorn
sumber
3
Jadi, tip cepat - jika Anda mencoba menjalankan ini di jalur jaringan, bahkan dengan pernyataan "JIKA ADA", itu akan gagal untuk mengatur folder dan pernyataan akan dicatat dalam prompt cmd "jalur UNC tidak mendukung, default ke direktori windows "maka itu akan mencoba untuk menghapus semua yang ada di direktori windows Anda. Jadi berhati-hatilah.
CBRF23
11

Anda dapat melakukan ini dengan menggunakan deldan /Sbendera (untuk memberitahukannya untuk mengulang semua file dari semua subdirektori):

del /S C:\Path\to\directory\*

The RD Perintah ini juga dapat digunakan. Hapus secara berulang secara diam-diam tanpa perintah:

@RD /S /Q %VAR_PATH%

Rmdir (rd)

PodTech.io
sumber
6
set "DIR_TO_DELETE=your_path_to_the_folder"

IF EXIST %DIR_TO_DELETE% (
    FOR /D %%p IN ("%DIR_TO_DELETE%\*.*") DO rmdir "%%p" /S /Q
    del %DIR_TO_DELETE%\*.* /F /Q
)
Cristian Tetic
sumber
3

Coba yang berikut ini; itu berhasil untuk saya.

Saya memiliki aplikasi yang membuang data di folder "C: \ tmp" saya, dan berikut ini yang terbaik untuk saya. Ia bahkan tidak meminta Ya atau Tidak untuk menghapus data. Saya telah membuat jadwal untuk menjalankannya setiap 5 menit

cd "C:\tmp"

del *.* /Q
malang
sumber
8
Jika folder "C: \ tmp" tidak ada (jika Anda atau aplikasi lain telah menghapus folder itu) dan jika Anda mencoba menjalankan yang ini, bukankah itu akan menghapus data dari folder lain di dalam "C: \"? (Itu terjadi dengan saya)
Vikram
4
Seperti yang dicatat Vikram: 1) Ini sangat berbahaya, dan 2) tidak menghapus subdirektori seperti yang dinyatakan dalam pertanyaan.
Bill_Stewart
2
Selain hal folder ... Anda bisa melakukannya del /q c:\tmp\*.*, yang sekitar satu juta kali lebih aman. Belum lagi cdhanya akan mengubah jalur, bukan mengemudi.
Nyerguds
1
Ini nasihat yang buruk. Seperti yang telah disebutkan orang lain, Anda dapat menghapus begitu banyak data penting sebagai akibatnya. Ditandai untuk dihapus, menurut saya seburuk itu.
RyanfaeScotland
3

Menggunakan

set dir="Your Folder Path Here"
rmdir /s %dir%
mkdir %dir%

Versi ini menghapus tanpa bertanya:

set dir="Your Folder Here"
rmdir /s /q %dir%
mkdir %dir%

Contoh:

set dir="C:\foo1\foo\foo\foo3"
rmdir /s /q %dir%
mkdir %dir%

Ini akan jelas C:\foo1\foo\foo\foo3.

(Saya ingin menyebutkan jawaban Abdullah Sabouin ini . Ada mencampur tentang saya menyalin dirinya. Saya tidak melihat jabatannya. Saya ingin mengucapkan terima kasih Melpomene untuk menunjukkan kesalahan!)

TravieDude Minecraft dan Lainnya
sumber
Itu tidak berhasil sama sekali. rmdir fookesalahan jika foobukan direktori kosong.
melpomene
@melpomene Saya menemukan kesalahan dan itu harus diperbaiki !!
TravieDude Minecraft dan Lainnya
1
Saya tidak bermaksud menyalin @Abdullah Sabouni dengan cara apa pun. Saya pasti tidak memperhatikan ini. Maafkan saya.
TravieDude Minecraft dan Lainnya
@melpomene Saya menyatakan kesalahan saya dan sudut pandang saya tentang apa yang terjadi. Tetapi saya telah memutuskan untuk tidak menghapus jika itu membantu. Terima kasih telah menunjukkannya.
TravieDude Minecraft dan Lainnya
@TravieDudeMinecraftandMore +1 - juga berhasil untuk saya.
Guy Avraham
2

Lebih baik lagi, katakanlah saya ingin menghapus semua yang ada di bawah C:\windows\tempfolder.

@echo off
rd C:\windows\temp /s /q
pengguna3788752
sumber
11
Itu menghapus direktori c:\windows\temp. Saya tidak berpikir itu yang ditanyakan oleh pertanyaan awal.
Bill_Stewart
Menghapus direktori tampaknya paling mudah bagi saya dan jika saya perlu membuatnya kembali setelah itu, saya bisa. Satu masalah bisa jadi kehilangan izin folder khusus. Namun, ini tampaknya jauh lebih mudah daripada kebanyakan jawaban lainnya.
madannes
1
Sayangnya, hapus dan segera buat ulang dari skrip batch tampaknya memberikan kesalahan "akses ditolak" secara acak, pada Win10 ...
Nyerguds
2

Anda dapat menggunakan robocopy untuk mencerminkan folder kosong ke folder yang Anda hapus.

robocopy "C:\temp\empty" "C:\temp\target" /E /MIR

Ini juga berfungsi jika Anda tidak dapat menghapus atau membuat ulang folder sebenarnya.

Itu membutuhkan direktori kosong yang ada.

Aaron
sumber
1
Menurut bantuan robocopy, /MIR :: MIRror a directory tree (equivalent to /E plus /PURGE).- jadi saya cukup yakin itu /Emubazir.
Nyerguds
0

Anda tidak dapat menghapus semuanya dengan salah satu rmdiratau delsendiri:

  • rmdir /s /qtidak menerima parameter karakter pengganti. Begitu rmdir /s /q *juga dengan kesalahan.
  • del /s /f /q akan menghapus semua file, tetapi subdirektori kosong akan tetap ada.

Solusi pilihan saya (seperti yang telah saya gunakan di banyak file batch lainnya) adalah:

rmdir /s /q . 2>NUL
butfly
sumber
0

Hanya versi modifikasi dari jawaban GregM :

set folder="C:\test"
cd /D %folder%
if NOT %errorlevel% == 0 (exit /b 1)
echo Entire content of %cd% will be deleted. Press Ctrl-C to abort
pause

REM First the directories /ad option of dir
for /F "delims=" %%i in ('dir /b /ad') do (echo rmdir "%%i" /s/q)

REM Now the files /a-d option of dir
for /F "delims=" %%i in ('dir /b /a-d') do (echo del "%%i" /q)

REM To deactivate simulation mode remove the word 'echo' before 'rmdir' and 'del'.
grenix
sumber
-2
@echo off
@color 0A

echo Deleting logs

rmdir /S/Q c:\log\

ping 1.1.1.1 -n 5 -w 1000 > nul

echo Adding log folder back

md c:\log\

Anda berada di jalur yang benar. Cukup tambahkan kode untuk menambahkan folder yang dihapus kembali.

Abdullah Sabouni
sumber
1
Saya tidak merekomendasikan solusi ini karena menghapus direktori (sehingga kehilangan izinnya) dan membuatnya kembali (mungkin dengan izin yang berbeda).
Bill_Stewart