Hapus semua file dari folder dan sub foldernya

52

Saya ingin menghapus semua file dari struktur folder, jadi saya pergi dengan struktur folder kosong.

Apakah ini dapat dicapai dalam skrip batch atau VBScript ?

Saya telah mencoba perintah batch yang sangat dasar, tetapi ini mengharuskan pengguna untuk mengizinkan penghapusan setiap file. Ini bukan solusi yang cocok karena ada ratusan file dan ini akan meningkat secara besar-besaran dari waktu ke waktu.

Apa yang bisa Anda sarankan?

BobJim
sumber
Maksud Anda sebuah penghapusan rekursif? Ini memang bisa dilakukan. Sesuatu seperti rd /s /q "c:\folder aakan melakukan penghapusan rekursif pada semua file dan folder di dalamFolder A
Ramhound
Saya bisa melakukannya, saya tidak tahu cara menulis skrip dengan PowerShell tetapi memiliki skrip PowerShell sebelumnya.
BobJim
2
Sekarang adalah waktu yang tepat untuk belajar, saya akan meneliti sintaks batch dan vbs untuk tujuan warisan, tetapi menginvestasikan lebih banyak waktu untuk belajar PS.
MDMoore313
Saya belum punya kesempatan untuk memeriksa kode meskipun saya yakin itu akan berhasil. Saya akan kembali dan memilih jawaban yang paling tepat untuk pertanyaan awal saya.
BobJim
Saya akan merekomendasikan @ BigHomie kedua - Saya baru belajar beberapa PowerShell dan saya harus mengatakan itu cukup rapi - tidak terlalu keras, senjata yang bagus di gudang coder manapun. Saya cukup sering menggunakannya sekarang.
Ben

Jawaban:

75

Ini dapat dicapai dengan menggunakan PowerShell :

Get-ChildItem -Path C:\Temp -Include *.* -File -Recurse | foreach { $_.Delete()}

Perintah ini $pathmemasukkan setiap item anak , mengeksekusi metode hapus pada masing -masing item , dan cukup cepat. Struktur folder dibiarkan utuh.

Jika Anda mungkin memiliki file tanpa ekstensi, gunakan

Get-ChildItem -Path C:\Temp -Include * -File -Recurse | foreach { $_.Delete()}

sebagai gantinya.

Tampaknya -Fileparameter mungkin telah ditambahkan setelah PowerShell v2. Jika itu masalahnya, maka

Get-ChildItem -Path C:\Temp -Include *.* -Recurse | foreach { $_.Delete()}

Seharusnya melakukan trik untuk file yang memiliki ekstensi.

Jika tidak berhasil, periksa apakah Anda memiliki versi terbaru Powershell

MDMoore313
sumber
1
Ini -Include *.*tidak -Include ., perbedaan besar! :-)
MDMoore313
Dapatkan-ChildItem -Path D: \ EmptyThisFolder -Include . -File -Recurse | foreach {$ _. Delete ()}
BobJim
Kenapa kamu menggunakan -Include .?? Itulah masalahnya.
MDMoore313
2
Tidak bisakah mereka mengimplementasikan powershell --version? Tidak bisakah mereka menggunakan nomor versi dengan angka positif? Ini gila. Lebih dari 1300 upvotes untuk pertanyaan tentang cara mengetahui nomor versi suatu program?
Thomas Weller
1
@demonicdaron tidak seharusnya; Pertanyaan OP adalah untuk menjaga struktur folder.
MDMoore313
25

PowerShell pendek dan sesuai kebutuhan. Tidak yakin apa versi PS yang paling rendah akan bekerja dengannya.

Remove-Item c:\Tmp\* -Recurse -Force
Evan Nadeau
sumber
2
Baik dan mudah. Ini berhasil sedangkan jawaban yang diterima tidak!
demonicdaron
Ini harus menjadi jawaban yang diterima, Anda bahkan dapat mengetik rm *karena itu tidak benar-benar disarankan untuk dipaksakan (dialog konfirmasi memiliki opsi "Ya untuk Semua").
J Garcia
22

Anda dapat melakukannya dengan delperintah:

dir C:\folder
del /S *

The /Sswitch untuk menghapus hanya file secara rekursif.

phoops
sumber
2
Apakah ini hanya menghapus file tetapi meninggalkan folder?
BobJim
5
Iya nih. Anda dapat menambahkan /Popsi sehingga akan meminta Anda untuk mengonfirmasi setiap penghapusan hanya untuk memeriksa itu.
phoops
terima kasih tidak mencobanya! semoga akan menghemat banyak waktu!
BobJim
3
Iya nih. Dan untuk menghapus file yang tersembunyi dan sistem, lakukan attrib -s -r -h Folder\*.* /s /dsebelum menghapus. Dan untuk izin gunakan takeownperintah.
Jet
2
Dan Anda dapat menggunakan / Q untuk TIDAK meminta konfirmasi saat menggunakan wildcard.
Aylatan
4

Membaca yang tersirat pada pertanyaan awal Anda, saya dapat menawarkan baris kode BATCH alternatif yang dapat Anda gunakan. Apa yang akan dilakukan ketika dijalankan hanya menghapus file yang sudah berusia lebih dari 60 hari. Dengan cara ini Anda dapat menempatkan ini dalam tugas yang dijadwalkan dan ketika itu berjalan menghapus file berlebih yang tidak Anda butuhkan daripada meniup seluruh direktori. Anda dapat mengubah 60 hingga 5 hari atau bahkan 1 hari jika Anda mau. Ini tidak menghapus folder.

forfiles -p "c:\path\to\files" -d -60 -c "cmd /c del /f /q @path"
Travis
sumber
Terima kasih atas idenya tetapi saat ini saya pikir proses "pengosongan" akan selesai pada kerangka waktu adhoc yang sangat tidak terjadwal. Saya akan menyimpan kode itu untuk masa depan! Cheers
BobJim
Judulnya bertuliskan "Hapus semua file dari folder dan sub foldernya" jadi ini bukan solusi.
Anders Lindén
4

Menggunakan PowerShell:

Get-ChildItem -Path c:\temp -Include * | remove-Item -recurse 
Gregory Suvalian
sumber
3

Gunakan PowerShell untuk Menghapus Satu File atau Folder. Sebelum menjalankan perintah Hapus di PowerShell, kami perlu memastikan Anda masuk ke server atau PC dengan akun yang memiliki akses penuh ke objek yang ingin Anda hapus.

Dengan Contoh: http://dotnet-helpers.com/powershell-demo/how-to-delete-a-folder-or-file-using-powershell/

Menggunakan PowerShell commnads untuk menghapus file

Remove-Item -Path "C: \ dotnet-helpers \ DummyfiletoDelete.txt"

Perintah di atas akan mengeksekusi dan menghapus file "DummyfiletoDelete.txt" yang ada di dalam lokasi "C: \ dotnet-helpers".

Menggunakan PowerShell commnads untuk menghapus semua file

Remove-Item -Path "C: \ dotnet-helpers *. *"

Menggunakan PowerShell commnads untuk menghapus semua file dan folder

Remove-Item -Path "C: \ dotnet-helpers *. *" -Kursur ulang

-recurselatihan dan menemukan lebih banyak file. The –recurseparameter akan memungkinkan PowerShell untuk menghapus setiap item anak tanpa meminta izin. Selain itu, –force parameter dapat ditambahkan untuk menghapus file yang tersembunyi atau hanya-baca.

Menggunakan perintah -Force untuk menghapus file dengan paksa

Menggunakan perintah PowerShell untuk menghapus semua file dengan paksa

Remove-Item -Path "C: \ dotnet-helpers *. *" -Paksa

thiyagu selvaraj
sumber
1

Coba ini menggunakan PowerShell. Dalam contoh ini saya ingin menghapus semua file .class:

Get-ChildItem '.\FOLDERNAME' -include *.class -recurse | foreach ($_) {remove-item $_.FullName}
Boubakr
sumber
1
  1. Di Windows Explorer pilih direktori root yang berisi semua file dan folder.

  2. Pencarian untuk *

  3. Sortir menurut Jenis (Semua folder akan berada di atas dan semua file yang tercantum di bawah)

  4. Pilih semua file dan tekan Delete.

Ini akan menghapus semua file dan mempertahankan struktur direktori.

Emel
sumber
1

Hapus semua file dari direktori dan sub-direktori saat ini tetapi meninggalkan struktur folder.

(/Q ) Switch untuk menanyakan pengguna apakah ia boleh menghapus

Perhatian : cobalah tanpa /Qmemastikan bahwa Anda tidak menghapus sesuatu yang berharga.

del /S * /Q 
hdoghmen
sumber
1

Ini adalah cara termudah IMO

Buka PowerShell, arahkan ke direktori ( cd), MAKA

ls -Recurse * | rm

(Puf) semuanya hilang ...

Jika Anda ingin menghapus berdasarkan ekstensi tertentu

ls -Recurse *.docx | rm

ls daftar direktori

-Recurse adalah flag yang memberitahukan PowerShell untuk masuk ke sub direktori

* kata semuanya

*.doc semuanya dengan ekstensi .doc

| beri makan output dari kiri ke kanan

rm menghapus

Semua jawaban lain tampaknya membuat ini lebih membingungkan daripada yang diperlukan.

Ngarai Kolob
sumber
0
dir C:\testx\ -Recurse -File | rd -WhatIf
What if: Performing the operation "Remove File" on target "C:\testx\x.txt".
What if: Performing the operation "Remove File" on target "C:\testx\bla\x.txt".
bertieb
sumber
-1

Sebagai pelengkap jawaban di atas, sebenarnya tidak perlu menggunakan Get-Childitem dan meneruskan hasilnya ke pipeline dalam jawaban di atas, karena kata kunci -Include termasuk dalam perintah Remove-Item

Seseorang dapat dengan mudah:

Hapus-Item -Termasuk " . " "C: \ Temp" -Recurse

Sams0nT
sumber