Удаление файлов старше 15 дней с помощью PowerShell

Я хотел бы удалить только файлы, созданные более 15 дней назад в определенной папке. Как я могу сделать это с помощью PowerShell?

Ответ 1

Данные ответы будут удалять только файлы (что, по общему признанию, есть в заголовке этого сообщения), но здесь есть код, который сначала удалит все файлы старше 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 в конце обеих строк.

Код, показанный здесь, совместим с PowerShell v2.0, но я также показываю этот код и более быстрый код PowerShell v3.0 как удобные функции повторного использования в моем блоге.

Ответ 2

Другой способ - вычесть 15 дней с текущей даты и сравнить CreationTime с этим значением:

$root  = 'C:\root\folder'
$limit = (Get-Date).AddDays(-15)

Get-ChildItem $root -Recurse | ? {
  -not $_.PSIsContainer -and $_.CreationTime -lt $limit
} | Remove-Item

Ответ 3

В принципе, вы перебираете файлы по заданному пути, вычтите 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

Ответ 4

просто (PowerShell V5)

Get-ChildItem -Path "C:\temp" -Recurse -File | Where CreationTime -lt  (Get-Date).AddDays(-15)  | Remove-Item -Force

Ответ 5

Попробуйте следующее:

dir C:\PURGE -recurse | 
where { ((get-date)-$_.creationTime).days -gt 15 } | 
remove-item -force

Ответ 6

$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

Это приведет к удалению старых папок и содержимого.

Ответ 7

Esperento57 script не работает в старых версиях 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

Ответ 8

Другая альтернатива (15. автоматически набирается на [timespan]):

ls -file | where { (get-date) - $_.creationtime -gt 15. } | Remove-Item -Verbose

Ответ 9

#----- 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"
    }
}