Buka PowerShell ISE dan coba jalankan ini:
$targets = @()
$folders = dir "D:\Users\Forza\Music\" | Where {$_.mode -match "d"}
foreach ($folder in $folders) {
if(
($folder.GetFiles() |
Measure-Object |
Select -ExpandProperty Count) -eq 1)
{$targets += $folder}
}
$targets | Format-Table -Property Name
Ini (harus) mengeluarkan daftar semua folder dengan satu file di dalamnya. Perhatikan baik-baik daftar dan pastikan tidak ada folder yang tidak disengaja. Kemudian Anda dapat menjalankan perintah:
foreach ($target in $targets){Remove-Item -Recurse -Force $target.FullName}
Ini akan menghapus semua folder yang terdaftar di $targets.
Jika Anda perlu memodifikasi skrip ini, ada baiknya Anda memahami apa yang dilakukannya. Sebagai contoh, Anda akan menghapus folder dengan subfolder tetapi tidak ada file di direktori pertama . Jadi, jika Anda memiliki sesuatu seperti C:\Users\Forza\Music\SomeArtist\SomeAlbum, seluruh direktori SomeArtist akan dihapus. Juga, folder kosong apa pun akan tetap ada.
Mari kita pergi baris demi baris:
$targets = @() mendefinisikan sebuah array. Ini supaya kita bisa menambahkan $folder s untuk $targets tanpa melemparkan kesalahan dan pastikan itu $targets mulai kosong, daripada terus menambahkannya sambil memodifikasi skrip kami dan akhirnya menghapus lebih banyak folder daripada yang kami maksud.
$folders = dir 'C:\Users\Forza\Music\' | Where {$_.mode -match "d"} daftar isi dari direktori yang ditentukan dan pipa yang menghasilkan ke Where-Object perintah. $_.mode -match "d" mengambil objek pipa dan memeriksa apakah mereka adalah direktori.
foreach ($folder in $folders) { mulai perulangan melalui setiap folder
if( memulai pernyataan if untuk memeriksa jumlah file di dalam folder. Saya telah membagi setiap baris untuk membuatnya membingungkan bisa dibaca
$folder.GetFiles() | ini mengambil semua file di folder yang kami periksa. Perhatikan pipa, yang mengirimkan output ke perintah berikutnya pada baris berikutnya.
Measure-Object | cukup jelas. Jika tidak, coba perintahnya Get-Help Measure-Object.
Select -ExpandProperty Count) -eq 1) memilih dan memperluas Count properti sehingga kita dapat melihat apakah itu sama dengan ( -eq ) 1. Perhatikan dua kurung tutup, satu untuk ditutup ($folder.GetFiles() | Measure-Object | Select -ExpandProperty Count) dan satu untuk menutup if pernyataan.
{$targets += $folder} menambahkan folder yang cocok dengan kriteria kami ke $targets daftar.
} menutup loop foreach.
$targets | Format-Table -Property Name menghapus daftar folder untuk dihapus.
Jika Anda ingin memodifikasi ini untuk menghapus folder kosong juga, cukup ubah -eq 1 untuk -lt 2. Dengan sedikit kreativitas Anda harus bisa mendapatkan skrip untuk menangani struktur file berantakan Anda sesuka Anda.
Untuk merawat folder Artis di bawah \ Music, ubah jalur ke sesuatu seperti C:\Users\Forza\Music\*\*\.