我正在尝试编写一个脚本,它将查看一组文件夹并仅保留最后10个文件 . 每个文件夹中的文件可以每天,每周或每月创建 . 无论创建日期或修改日期如何,我都需要脚本来保留最近的10个副本 .
使用另一篇文章我创建了下面的脚本,但它不会保留10个副本,它会保留任何不超过10天的文件 .
$ftppath = "C:\Reports"
Get-ChildItem $ftppath -recurse *_Report_*.zip -force|where {$_.lastwritetime -lt (get-date).adddays(-10)} |Remove-Item -force
关于我如何调整这个工作的任何想法?如果我使用下面的脚本它可以工作,但只有我不设置-Recurse . 如果您使用-Recurse开关,则会收到我在脚本下方列出的错误 .
# Keeps latest 10 files from a directory based on Creation Time
#Declaration variables
$path = "C:\Reports" # For example $path= C:\log\*.tmp
$total= (ls $path).count - 10 # Change number 5 to whatever number of objects you want to keep
# Script
ls $path |sort-object -Property {$_.CreationTime} | Select-Object -first $total | Remove-Item -force
错误:Select-Object:无法验证参数'First'的参数 . -7参数小于允许的最小范围0.提供大于0的参数然后再次尝试该命令 .
3 回答
@Andy:我的代表太低了,无法评论,所以发布了答案 . 如果您得到奇怪的结果,可能是因为您正在查看Windows资源管理器,默认情况下显示上次修改日期而不是创建日期 . 要获得与Windows资源管理器中显示的结果一致的结果,请将LastWriteTime替换为CreationTime,如下所示:gci C:\ temp \ -Recurse |其中{-not $ _ . PsIsContainer} | sort LastWriteTime -desc |选择-Skip 10 |删除项目 - 强制
您可以按
CreationTime
降序排序并跳过前10个 . 如果少于10个文件,则不会删除任何文件 .Updated
准备删除真实时,删除
-WhatIf
参数为Remove-Item
.