Ini adalah posting pertama saya di forum ini. Saya seorang pemula dalam pengkodean dan saya butuh bantuan dengan salah satu alat kode diri pertama saya. Saya membuat skrip kecil, yang menghapus file berdasarkan apakah mereka lebih tua dari tanggal x (waktu penulisan terakhir). Sekarang untuk masalah saya: Saya ingin skrip juga memeriksa file di dalam folder di dalam direktori dan hanya menghapus folder setelahnya jika benar-benar kosong. Saya tidak tahu bagaimana menyelesaikan rekursi dalam masalah ini, sepertinya skrip hanya menghapus seluruh folder sehubungan dengan tanggal x. Adakah yang bisa memberi tahu saya apa yang saya lewatkan dalam kode ini dan membantu saya membuat rekursi sendiri untuk menyelesaikan masalah atau memperbaiki kode? Terima kasih untuk kalian semua! Ini kode saya:

Saya akan senang jika seseorang tahu cara membuat kode berfungsi dengan menggunakan fungsi


$path = Read-Host "please enter your path"
"
"

$timedel = Read-Host "Enter days in the past (e.g -12)"

$dateedit = (Get-Date).AddDays($timedel)
"
"
Get-ChildItem $path -File -Recurse | foreach{ if ($_.LastWriteTime -and !$_.LastAccessTimeUtc -le $dateedit) {

Write-Output "older as $timedel days: ($_)" } }

" 
"
pause

Get-ChildItem -Path $path -Force -Recurse | Where-Object { $_.PsisContainer -and $_.LastWriteTime -le $dateedit } | Remove-Item -Force -Recurse 

""
Write-Output "Files deleted"
0
xjustinx000 30 November 2020, 14:28

2 jawaban

Jawaban Terbaik
param(
    [IO.DirectoryInfo]$targetTolder = "d:\tmp",
    [DateTime]$dateTimeX = "2020-11-15 00:00:00"
)

Get-ChildItem $targetTolder -Directory -Recurse | Sort-Object {$_.FullName} -Descending | ForEach-Object {
    Get-ChildItem $_ -File | Where-Object {$_.LastWriteTime -lt $dateTimeX} | Remove-Item -Force
    if ((Get-ChildItem $_).Count -eq 0){Remove-Item $_ -Force} 
}

Hapus -WhatIf setelah tes

0
Алексей Семенов 30 November 2020, 13:23

Coba sesuatu seperti ini:

$timedel=-12

#remove old files
Get-ChildItem "C:\temp" -Recurse -File | Where LastWriteTime  -lt  (Get-Date).AddDays($timedel)  | Remove-Item -Force

#remove directory without file
Get-ChildItem "C:\temp\" -Recurse -Directory | where {(Get-ChildItem $_.FullName -Recurse -File).count -eq 0} | Remove-Item -Force -recurse
0
Esperento57 1 Desember 2020, 03:34