我正在尝试删除%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
时将它们全部锁定?还有其他想法如何解决这个问题?
最佳答案
如何删除30天以上的文件并忽略错误:
$old = (Get-Date).AddDays(-30)
Get-ChildItem $env:TEMP -Recurse |
Where-Object {!$_.PSIsContainer -and $_.LastWriteTime -lt $old } |
Remove-Item -Force -ErrorAction SilentlyContinue
关于powershell - 删除未锁定(正在使用)的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12371836/