当 Windows 上的文件数量大于 500(或 XXX)时自动删除文件

当 Windows 上的文件数量大于 500(或 XXX)时自动删除文件

我已经看到了一种可以按照计划任务运行的删除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 }

相关内容