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.

Michael K.
sumber

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.

Windos
sumber
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"
grawity
sumber
3
Saya tidak ingin menghapus folder share.
Michael K
12

Coba ini di command prompt:

rd /s/q "C:\Share"
Chau Chee Yang
sumber
2
Folder induk ini dihapus juga, bukan konten folder.
Teoman shipahi
2

Bagaimana dengan ?

rmdir /S /Q "target"
mkdir "target

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

Vasilly.Prokopyev
sumber
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.

Jim JR Harris
sumber
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

Otto Hänninen
sumber
0

secara sederhana:

rmdir / s / q "path"

mkdir "jalan"

eli
sumber
1
Ini adalah duplikat dari jawaban ini .
Saya katakan Reinstate Monica