2017-09-07 46 views
-2

我不知道.bat支持刪除N小時以前的文件嗎?我有一個腳本可以刪除N天以前的文件,但無法找到基於小時的命令。如果.bat文件沒有小時函數,我們可以使用PowerShell腳本來做到這一點嗎?我正在清理C:\ temp(Windows Server)中超過6小時的所有文件。批處理或Powershell腳本清理超過6小時的文件?

回答

0

你可以很容易地使用powershell獲得這些信息。

您需要使用Get-ChildItem(帶遞歸參數)並過濾掉文件夾。

get-childitem 'C:\Temp' | Where-Object PSIsContainer -eq $false 

請參閱下面的腳本以獲得入門基礎。

$Files = get-childitem 'C:\Temp' | Where-Object PSIsContainer -eq $false 
$LimitTime = (Get-Date).AddHours(-6) 
$Files | ForEach-Object { 
    if ($_.CreationTime -lt $LimitTime -and $_.LastWriteTime -lt $LimitTime) { 
    Remove-Item -Path $_.FullName -Force -WhatIf 
    } 
} 

要注意 你將需要刪除-WhatIf該腳本實際刪除任何東西。

編輯:

感謝andyb評論,我刪除贊成時間跨度爲一個直接的日期比較。

+1

不需要TimeSpan;只需使用'(Get-Date).AddHours(-6)' – andyb

+0

傻了,我用你的建議改進了我的答案。 –

0

傳統批處理文件非常困難,但在PowerShell中幾乎微不足道。您可以通過簡單地將012小時添加到由Get-Date返回的對象來確定'6小時前'的日期&。之後,如果找到文件並將LastWriteTime屬性與(get-date).AddHours(-6)進行比較並將結果傳送至remove-item,那麼這只是一個問題。

get-childitem -path <path> | 
    where-object { -not $_.PSIsContainer -and ($_.LastWriteTime -lt (Get-Date).AddHours(-6)) } | 
    remove-item -force 
+0

在該檢查中添加CreationTime也是一件好事。如果文件被移動/複製到文件夾上,LastWriteTime將不會更新。我的文件的creationTime日期設置爲2017年9月(我移動了它們),而他們的LastWriteTime從2004年開始。 –

+0

理解創建時間和上次寫入時間之間的差異很好,但在這種情況下,我不認爲它們是都需要。問題是關於從臨時文件夾中清除文件;我無法想象我會將舊文件移動到我知道自動清理的臨時文件夾中。特別是如果這些文件具有很多價值。 – andyb

+0

在* nix土地上爲那些貧窮的人留下一個想法,他們必須與上次訪問,上次修改時間和上次更改的時間戳進行抗衡! – andyb