Bagaimana cara membuat file batch yang menghapus semua folder bernama `bin` atau` obj` secara rekursif?


31

Saya perlu menghapus semua bin& objfolder dalam folder di PC saya. Jadi, saya sedang memikirkan file batch untuk melakukan itu tetapi saya tidak famaliar dengan file batching di Windows. Tolong bantu.

[Sunting]

Setelah berdiskusi dengan pengguna DMA57361, saya mendapatkan solusi saat ini (masih mengalami masalah, lihat komentar kami):

Buat file .bat, dan rekatkan perintah di bawah ini:

start for /d /r . %%d in (bin,obj) do @if exist "%%d" rd /s/q "%%d"

ATAU

start for /d /r . %%d in (bin,obj) do @if exist "%%d" rd /s "%%d"

@ DMA57361: Ketika saya menjalankan skrip Anda, saya mendapatkan kesalahan di bawah ini. Ada ide?

teks alternatif


@ Ny - mengapa Anda menjalankan for \/d \/r ...- mengapa garis miring bukan for /d /r ...? Dan menjalankan versi "penuh" dengan /qdi akhir - seperti yang saya nyatakan - menghapus semuanya tanpa peringatan sehingga tidak menghasilkan output (yaitu, ia tidak memberi tahu Anda ketika itu bekerja, hanya ketika ia memiliki kesalahan), apakah Anda yakin yang kedua jalankan di atas tidak berfungsi dengan benar?
DMA57361

@Nam, jalankan ini juga tidak sama - dalam gambar perintah Anda mulai for / %d in dan tidak for /d /r . %d in- Anda harus menggunakan seluruh perintah di bawah ini, setiap bit memiliki fungsi yang berbeda dan penting.
DMA57361

@Nam Opps, permintaan maaf saya, Anda sepenuhnya benar, itu tidak mencetak beberapa switch pertama! Namun, itu tidak membuang kesalahan itu dan tampaknya berfungsi dengan benar, bagi saya. Sudahkah Anda mencoba menjalankan perintah dari baris perintah, alih-alih mencoba menjalankannya dari dalam file batch?
DMA57361

Hmm, aneh sekali. Mungkin Win7 Anda melakukan sesuatu yang berbeda dengan batch dibandingkan dengan WinXP saya saat itu, tidak yakin apa. Saya akan dapat memeriksa Win7 di rumah malam ini, kalau tidak saya khawatir saya terjebak saat ini ...
DMA57361

Sebenarnya, coba awali perintah batch dengan startdan lihat apa yang terjadi. Tidak ideal, tetapi saya ingin tahu apakah itu dapat membantu.
DMA57361

Jawaban:


42

Ini sebelumnya telah dijawab pada Stack Overflow, yang mana saya mengambil dorongan utama dari jawaban ini.

Coba perintah berikut, Anda dapat menjalankannya dari dalam cmd:

for /d /r . %d in (bin,obj) do @if exist "%d" rd /s/q "%d"

Jika Anda perlu folder lain diubah, maka tambahkan saja item baru ke (bin,obj)set di tengah perintah.

Ini akan menghapus semua yang cocok tanpa peringatan dan tanpa menggunakan recycle bin - jadi, jika Anda ingin sedikit keamanan ekstra, lepaskan /qpanggilan dari rdpada akhirnya, dan sistem akan menanyakan Anda sebelum setiap penghapusan.

for /d /r . %d in (bin,obj) do @if exist "%d" rd /s "%d"

Jika Anda ingin menjalankan perintah dari dalam file batch , Anda harus mengganti setiap instance variabel %ddengan %%d, seperti:

for /d /r . %%d in (bin,obj) do @if exist "%%d" rd /s/q "%%d"
OR
for /d /r . %%d in (bin,obj) do @if exist "%%d" rd /s "%%d"

Sesuai konversi ada di komentar pertanyaan

Jika perintah menolak untuk dijalankan dalam file batch (tidak dapat mereplikasi di sini), coba awali perintah dengan start. Meskipun ini akan memulai proses untuk berjalan bersamaan dengan file batch, yang dapat menyebabkan masalah lain, tampaknya lebih mungkin untuk bekerja dengan benar.

Juga, jika Anda memiliki file bernama objatau bindi dalam pohon folder perintah sedang bekerja, maka Anda akan menerima pesan kesalahan untuk setiap file yang ditemukan yang memiliki nama yang cocok. File-file yang cocok ini tidak dihapus, dan seharusnya tidak menghalangi perintah menghapus apa yang seharusnya. Dengan kata lain, mereka dapat diabaikan dengan aman.


1
APAKAH Anda mungkin tahu bagaimana saya bisa mengabaikan satu folder di dalam folder root ini tempat saya menjalankan perintah ini?
Goran Obradovic

Bekerja dengan sempurna! Terima kasih! +1
khr055

1

Perintah-perintah ini harus bekerja pada cmd.

del * .obj

del * .bin


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.