2012-09-11 67 views
1

我試圖刪除大於30天的%TEMP%中的所有文件(不是文件夾)。問題在於某些程序正在使用某些文件,因此無法刪除它們。我試圖解決的問題如下:刪除未鎖定的文件(使用中)

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

任何其他的想法如何解決這個問題

回答

4

如何只刪除30天以上的文件,並忽略錯誤:??

$old = (Get-Date).AddDays(-30) 

Get-ChildItem $env:TEMP -Recurse | 
Where-Object {!$_.PSIsContainer -and $_.LastWriteTime -lt $old } | 
Remove-Item -Force -ErrorAction SilentlyContinue 
+0

謝謝,這是更好的方法! –