我已经看到了一种可以按照计划任务运行的删除X天以上的文件的方法:
forfiles -p "C:\Test" -s -m *.* /D -5 /C "cmd /c del @path"
我想知道是否有人知道可以删除除最近的 500 个文件之外的所有文件的命令?
或者另一种选择是,一旦 XXX 存储空间用完,就删除最旧的文件。
答案1
我无法发表评论,但正如所提到的,powershell 可以处理这个问题,但您的系统可能没有默认设置上次访问时间进行更新。上次写入时间可能不是文件仍在使用或旧的有用指标,但它也可以使用。
查询当前状态
fsutil behavior query disablelastaccess
启用
fsutil behavior set disablelastaccess 0
下面是 Powershell 代码片段
$Path = ""
Get-ChildItem -Recurse -Force -Path $Path | Sort-Object -Property LastAccessTime -Descending | Select-Object -Last 500 | Foreach-Object { Remove-Item $_.FullName -Force }
如果您的目标是根据日期进行过滤,那么您可以使用 Get-Date 并将其分配给变量,然后在 LastAccessTime 和该变量之间使用比较运算符。
例如
$Path = ""
$Date = Get-Date
$Date = $Date.AddDays(-90) #Delete 90 Days or Older
Get-ChildItem -Recurse -Force -Path $Path | Sort-Object -Property LastAccessTime -Descending | Where-Object -FilterScript { $_.LastAccessTime -le $Date } | Select-Object -Last 500 | Foreach-Object { Remove-Item $_.FullName -Force }