Bagaimana cara saya menghapus pohon direktori melalui file batch pada Windows 7?


36

Saya ingin menghapus seluruh konten folder tertentu pada Windows 7 melalui file batch. Masalah saya adalah, bahwa 'del' atau 'hapus' hanya menghapus file, bukan folder dan 'rmdir' atau 'rd' selalu menghapus folder yang ditentukan dengan isinya, tetapi saya hanya ingin menghapus konten, bukan folder itu sendiri . Saya mencoba perintah ' rmdir /S /Q "C:\Share\*"' yang memberi saya kesalahan sintaks.

Apa cara yang benar untuk melakukan ini?

Saya bekerja pada Windows 7 Professional 64-bit dan memiliki izin admin.

Jawaban:


36

File batch Anda perlu menjalankan dua perintah, satu untuk menghapus file kemudian satu untuk menghapus direktori anak. Saya berasumsi direktori yang ingin Anda hapus adalahC:\Share\

File batch akan terlihat seperti ini:

del /s /f /q c:\share\*.*
for /f %%f in ('dir /ad /b c:\share\') do rd /s /q c:\share\%%f

del /s /f /q akan secara rekursif mencari melalui pohon direktori menghapus file apa pun (bahkan hanya membaca file) tanpa meminta konfirmasi.

Baris kedua loop melalui semua sub direktori (yang seharusnya sekarang kosong) dan menghapusnya.

Pendek menghapus seluruh folder dan membuatnya kembali (yang saya pikir Anda tidak ingin lakukan karena izin?) Ini harus menjadi cara termudah untuk membersihkan folder.


Jika saya melakukan sedikit koreksi di sini "untuk / f %% f" -> "untuk / f% f" maka berfungsi dengan baik :) Terima kasih banyak.
Michael K

6
deltidak perlu. rd/s/qakan menghapus file dan subfolder.
grawity

1
@ kegemaran delterutama ada untuk setiap file di folder root, bisa menghapus saklar rekursi sekalipun.
Windos

5
@MichaelK, %% f untuk digunakan dalam file batch,% f untuk ketika itu adalah perintah tunggal langsung ke baris perintah.
Windos

1
Jika ada salah satu nama subdirektori yang mengandung spasi, Anda dapat menambahkan "delims =" untuk memprosesnya dengan benar (untuk / f "delims =" %% f di ...): Lihat stackoverflow.com/q/5553040/64918
goldPseudo

27
rmdir /s/q C:\Share

Anda mendapatkan "Kesalahan sintaksis" karena rmdirhanya menerima nama lengkap, bukan wildcard. (Dalam cmd.exe, ekspansi wildcard diserahkan kepada masing-masing program; tidak semuanya melakukannya.)

Jika Anda memiliki banyak direktori Share..., gunakan forloop.

for /d %f in (C:\Share*) do rmdir /s/q "%f"

3
Saya tidak ingin menghapus folder share.
Michael K


2

Bagaimana dengan ?

rmdir /S /Q "target"
mkdir "target

EDIT: tentu saja solusi ini hanya berlaku ketika Anda dapat mentolerir ketidakhadiran folder sesaat.


Ini akan menghapus folder asli.
Michael K

@MichaelK Tugas saya bisa mentolerir folder absen sesaat, jadi saya pergi dengan solusi ini. Saya pikir, itu lebih sederhana dan lebih mudah dibaca daripada for /fdalam kasus yang mirip dengan milik saya. Hanya ingin berbagi
Vasilly.Prokopyev

2
for /f "delims=" %%f in ('dir /ad /b c:\share\') do rd /s /q c:\share\%%f

Ini tidak berfungsi jika subdirektori berisi direktori lain yang berisi spasi.

Untuk membuat ini berfungsi, saya perlu mengutip string terakhir, seperti ini

untuk / f "delims =" %% f dalam ('dir / ad / bc: \ share \') lakukan rd / s / q "c: \ share \ %% f"

Rupanya, ini menyebabkan perintah untuk bekerja pada string yang dikutip, bukan hanya string itu sendiri.


0

Saya akan mencoba ini di folder di mana semua subfolder harus dihapus tetapi root (dan file di root) dibiarkan apa adanya: for / D% v di (*) do rd / s / q% v

untuk / D cocok dengan direktori dan rd / s / q menghapus masing-masing sekaligus


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.