%TEMP%
30日以上経過している(フォルダではなく)すべてのファイルを削除しようとしています。問題は、一部のファイルがプログラムによって使用されているため、削除できないことです。私は次のように問題を解決しようとしました:
function IsFileLocked($filePath){
#write-host $filePath
Rename-Item $filePath $filePath -ErrorVariable errs -ErrorAction SilentlyContinue
$errs.Count
if ($errs.Count -ne 0)
{
return $true #File is locked
}
else
{
return $false #File is not locked
}
}
$Path= "$env:temp"
if ((Test-Path -Path $Path) -ieq $true)
{
$Daysback = '-30'
$CurrentDate = Get-Date
$DatetoDelete = $CurrentDate.AddDays($Daysback)
get-childitem $Path -recurse | Where-Object {$_.LastWriteTime -lt $DatetoDelete } |
Where-Object {$_.PSIsContainer -eq $False }| Where-Object {(IsFileLocked -filePath "($_)") -eq $false }# | remove-item -force #-WhatIf
}
問題は、(IsFileLocked -filePath "($_)") -eq $false
要素を返さないことです。
get-childitem
ファイルをブロックして、実行時にすべてのファイルがロックされる可能性はありますget-childitem
か?
この問題を解決する方法の他のアイデアはありますか?