2015-11-10 46 views
3

我的需求是在公用文件夾中刪除所有超過14天的文件。我已經拼湊出了一個PowerShell腳本,可以根據需要隨心所欲地執行操作。 。 。唯一的問題是,如果用戶將文件移動到文件夾中 - 而不是複製它 - 我的腳本將刪除該文件,如果它最後一次訪問超過14天前,即使它在同一天移入公用文件夾。剪切和粘貼也會發生同樣的情況。所以這是一個非常嚴重的問題。我可以讓PowerShell腳本刪除移動和剪切的文件嗎?

這裏是我的腳本:

# Delete all files older than "file_age" days, at "path". 
$path = "C:\Users\emcguire\Desktop\Test" 
$file_age = "-14" 

$current_date = Get-Date 
$date_to_delete = $current_date.AddDays($file_age) 

Get-ChildItem $path -Recurse | Where-Object { $_.LastAccessTime -lt $date_to_delete } | Remove-Item 

我是很新的PowerShell的,所以我可能失去了一些東西很明顯。有沒有簡單的方法來檢查文件被移入文件夾,但沒有更改訪問時間戳?有沒有更好的方法來解決這個問題?

我感謝任何幫助!

+1

我不認爲你可以在你的腳本來完成這事。這聽起來像是按照設計工作。您所依賴的日期在某些情況下沒有更新,因此您需要限制這些情況或使用不同的標準。 – briantist

回答

1

該屬性LastAccessTime是一個臭名昭着的避免財產。儘量先使用LastWriteTime。另外,所有這些屬性都是陳舊的,這意味着當你給它們打電話時它們不會刷新。使用此代碼來調用刷新方法來保證你有新的文件系統信息您查詢的屬性之前:

$file = c:\somefile.txt 
$fileObj = New-Object System.IO.FileInfo $file 
$fileObj.Refresh() 

當你想你的基地關閉行動多久的文件已經在歸檔目錄中,您可能想要爲您指定CreationTime屬性。我在下面的鏈接中添加了一個鏈接,以便您的選擇能夠滿足您的需求。

For reference on the refresh method

For reference on properties to value

+0

謝謝!我可以爲整個文件夾調用刷新方法,還是需要遍歷該文件夾中的所有文件,並調用每個文件夾的刷新方法? –

+0

您需要遍歷文件並調用每個文件的刷新。不幸的是,刷新特定於文件對象實例。 – Colyn1337

+0

這仍然會導致任何文件被移動或剪切並粘貼到文件夾中 - 比如前一天 - 有時會被刪除,當它們未被修改等時,它們在舊位置。也許我需要以不同的方式解決這個問題? –

相關問題