我想只刪除超過15天前在特定文件夾中創建的文件。我怎樣才能使用PowerShell來做到這一點?使用PowerShell刪除超過15天的文件
回答
試試這個:
dir C:\PURGE -recurse |
where { ((get-date)-$_.creationTime).days -gt 15 } |
remove-item -force
我相信最後一個'-recurse'太多了,不是嗎?目錄列表是遞歸的,刪除的項目不應該包括孩子,對吧? – Joost
是的,你是對的 – RayofCommand
如果你正在使用的目錄是兩個目錄深的第二 - 流氓需要。 –
基本上,你遍歷文件指定路徑下,減去從當前時間找到的每個文件的CreationTime
,並與之比較的結果的Days
財產。該-WhatIf
交換機會告訴你並沒有實際刪除的文件(文件將被刪除)會發生什麼,刪除開關實際刪除文件:
$old = 15
$now = Get-Date
Get-ChildItem $path -Recurse |
Where-Object {-not $_.PSIsContainer -and $now.Subtract($_.CreationTime).Days -gt $old } |
Remove-Item -WhatIf
另一種方式是從當前日期減去15天,比較CreationTime
針對值:
$root = 'C:\root\folder'
$limit = (Get-Date).AddDays(-15)
Get-ChildItem $root -Recurse | ? {
-not $_.PSIsContainer -and $_.CreationTime -lt $limit
} | Remove-Item
給出的答案只會刪除文件(這誠然是什麼在這篇文章的標題),但這裏的一些代碼,會先刪除所有的文件超過15天,然後遞歸刪除可能留下的空目錄。我的代碼也使用-Force
選項來刪除隱藏和只讀文件。另外,我選擇不使用別名,因爲OP對於PowerShell來說是新的,並且可能不知道什麼是gci
,?
,%
等等。
$limit = (Get-Date).AddDays(-15)
$path = "C:\Some\Path"
# Delete files older than the $limit.
Get-ChildItem -Path $path -Recurse -Force | Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $limit } | Remove-Item -Force
# Delete any empty directories left behind after deleting the old files.
Get-ChildItem -Path $path -Recurse -Force | Where-Object { $_.PSIsContainer -and (Get-ChildItem -Path $_.FullName -Recurse -Force | Where-Object { !$_.PSIsContainer }) -eq $null } | Remove-Item -Force -Recurse
,如果你想看到什麼文件/文件夾將實際刪除它們之前被刪除,當然還有,你可以在兩行的末尾添加-WhatIf
切換到Remove-Item
cmdlet的電話。
此處顯示的代碼與PowerShell v2.0兼容,但我也將此代碼和更快的PowerShell v3.0代碼顯示爲handy reusable functions on my blog。
感謝您不使用別名。對於剛接觸PowerShell並通過Google搜索找到本文的人,我認爲您的答案是最好的。 –
我嘗試了@ deadlydog的建議,無論我指定-15還是-35以及不同的文件創建日期,都會返回幾個月(或最近),它會刪除目錄的全部內容。 – Michele
似乎工作,非常感謝! –
$limit = (Get-Date).AddDays(-15)
$path = "C:\Some\Path"
# Delete files older than the $limit.
Get-ChildItem -Path $path -Force | Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $limit } | Remove-Item -Force -Recurse
這將刪除舊文件夾及其內容。
#----- Define parameters -----#
#----- Get current date ----#
$Now = Get-Date
$Days = "15" #----- define amount of days ----#
$Targetfolder = "C:\Logs" #----- define folder where files are located ----#
$Extension = "*.log" #----- define extension ----#
$Lastwrite = $Now.AddDays(-$Days)
#----- Get files based on lastwrite filter and specified folder ---#
$Files = Get-Children $Targetfolder -include $Extension -Recurse | where {$_.LastwriteTime -le "$Lastwrite"}
foreach ($File in $Files)
{
if ($File -ne $Null)
{
write-host "Deleting File $File" backgroundcolor "DarkRed"
Remove-item $File.Fullname | out-null
}
else
write-host "No more files to delete" -forgroundcolor "Green"
}
}
這個答案有什麼問題?爲什麼downvotes? – user3282276
它會正常工作,但不使用PowerShell功能。 – PseudoToad
此外,它永遠不會到達* else *語句,因爲如果'$ Files'爲空,它將不會進入* foreach *語句。 您應該將foreach放在* if *語句中。 – Dieter
只是簡單(PowerShell的V5)
Get-ChildItem "C:\temp" -Recurse -File | Where CreationTime -lt (Get-Date).AddDays(-15) | Remove-Item -Force
Esperento57的腳本不中老年PowerShell的版本。這個例子的作用:
Get-ChildItem -Path "C:\temp" -Recurse -force -ErrorAction SilentlyContinue | where {($_.LastwriteTime -lt (Get-Date).AddDays(-15)) -and (! $_.PSIsContainer)} | select name| Remove-Item -Verbose -Force -Recurse -ErrorAction SilentlyContinue
你也刪除了目錄.. – Esperento57
我已經更新了我的答案,現在排除目錄,謝謝。 – KERR
另一種選擇(15被輸入到[時間跨度]自動):
ls -file | where { (get-date) - $_.creationtime -gt 15. } | Remove-Item -Verbose
- 1. Powershell腳本刪除15天舊的.txt文件
- 2. 刪除超過一天的文件
- 3. Powershell刪除x天前的文件
- 4. 用多個拉鍊刪除超過這麼多天的文件
- 5. 用.bat刪除超過30天的文件fle
- 6. unix腳本超過15天的歸檔日誌文件
- 7. 刪除所有文件和目錄,超過5天的,除了一個文件
- 8. 在bash中查找超過X天的文件並刪除
- 9. 在perl中刪除超過7天的文件
- 10. Cordova檢索並刪除超過30天的文件?
- 11. 在Jenkins工作區中刪除超過X天的文件
- 12. 在Perl中刪除超過90天的文件
- 13. 的Unix刪除子文件夾在YYYYMMDD是超過30天
- 14. 刪除超過30天的下載?
- 15. 刪除所有超過5天的行
- 16. 如何僅使用正則表達式刪除超過5天的文件
- 17. 在Unix中使用shell腳本刪除超過10天的文件
- 18. 如何使用Cron Jobs查找並刪除15天以前的舊文件?
- 19. Powershell刪除文件
- 20. Powershell - 刪除文件
- 21. 刪除文件夾及其內容年長超過2天PHP
- 22. 子目錄中使用Linux命令刪除文件日期早超過1天
- 23. 使用PowerShell遞歸刪除文件
- 24. 使用powershell刪除舊文件
- 25. 使用PowerShell刪除日誌文件
- 26. 使用Powershell刪除空文件夾
- 27. 使用JavaScript刪除超過一天的cookie
- 28. bash腳本文件移除舊的超過15個月
- 29. PowerShell的 - 刪除文件日期早丹X天,但排除的文件夾
- 30. 需要刪除超過30天的文件夾,但排除一些
大部分的答案使用CREATIONTIME但是它會當一個文件被拷貝重置,所以你可能不得到你想要的結果。 LastWriteTime是與Windows資源管理器中的「修改日期」對應的內容。 –