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

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

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

    просто (PowerShell V5)

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

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

     $root = 'C:\root\folder' $limit = (Get-Date).AddDays(-15) Get-ChildItem $root -Recurse | ? { -not $_.PSIsContainer -and $_.CreationTime -lt $limit } | Remove-Item 

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

    Попробуй это:

     dir C:\PURGE -recurse | where { ((get-date)-$_.creationTime).days -gt 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 

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

     ls -file | where { (get-date) - $_.creationtime -gt 15. } | Remove-Item -Verbose 
     $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" } } 
    Давайте будем гением компьютера.