以前一直以为 Windows 会自动清理下载文件夹里的过期文件,但发现并不会(可恶)
所以就自己写了一个清理脚本,挂到任务计划程序里了。
选择每天中午自动运行脚本。
# 配置
$deleteAge = 60 # Days
$deletePaths = @("E:\Azide\Download","F:\TencentQQ\File")
# 统计用变量
$totalCount = 0
$totalSize = 0 # MB
# 获取当前日期
$currentDate = Get-Date
# 获取 Download 文件夹中的所有文件或者文件夹
$items = Get-ChildItem -Path $deletePaths
# 遍历所有文件和文件夹
foreach ($item in $items) {
# 计算文件或文件夹的最后修改日期与当前日期的差值
$age = $currentDate - $item.LastWriteTime
# 如果差值大于 30 天,打印文件或文件夹的路径, 并删除
if ($age.TotalDays -gt $deleteAge) {
Write-Output "Will delete: $($item.FullName), Age: $($age.TotalDays)"
$totalCount++
$totalSize += $item.Length / 1MB
Remove-Item -LiteralPath $($item.FullName) -Recurse -Force
}
}
# 打印统计信息
Write-Output "Deleted $totalCount / $($items.Count) items"
Write-Output "Total size: $totalSize MB"
可以改成从脚本外接受参数来指定
$deleteAge
和$deletePaths
./auto_clear.ps1 -Paths "E:\Azide\Download","F:\TencentQQ\File" -Age 60
只需要在原脚本开头加上接受参数的声明,并将参数传给$deleteAge
和$deletePaths
即可
# 获取命令行参数
param(
[string]$Paths = @("E:\Azide\Download","F:\TencentQQ\File"),
[int]$Age = 60 # Days
)
# 配置
$deleteAge = $Age
$deletePaths = $Paths
# ...
直接声明接收的参数为$deleteAge
和$deletePaths
,或者修改变量名$deleteAge
, $deletePaths
为$Age
, $Paths
也不是不行,这样就不用多一步赋值了