powershell可通过shell.application com对象筛选回收站中小于指定大小(如50mb)的文件并永久删除,跳过大文件,但无法获取原始路径或精确时间,仅支持逻辑大小粗略过滤,操作不可逆需谨慎测试。
在 windows 中,powershell 脚本可以自动清理回收站,并通过筛选条件避免误删重要大文件(比如保留大于 100mb 的文件不删),但需注意:回收站本身不支持“按大小过滤后单独删除部分项目”——系统级回收站是整体清空或保留机制。因此实际可行方案是:先识别回收站中满足“小文件”条件的项,再安全移除它们,同时跳过指定大小以上的文件。
一、理解回收站的 PowerShell 操作限制
PowerShell 无法直接遍历 Recycle Bin 的详细文件列表(如文件名、大小、原始路径)并逐个判断删除,这是 Windows Shell API 的设计限制。但可通过 Shell.Application COM 对象间接访问,配合 Size 属性做粗略筛选:
- 该方式依赖 Explorer 进程,脚本需以普通用户权限运行(非管理员);
- 返回的 Size 是“逻辑大小”,对压缩/稀疏文件可能不准,但对常规文件有效;
- 不能获取原始路径或修改时间,仅适用于“按大小快速清理”场景。
二、编写带大小过滤的回收站清理脚本
以下脚本会清空回收站中 小于指定阈值(如 50MB) 的所有项目,大于等于该值的保留不动:
# Clean-RecycleBin-Safe.ps1
$MaxSizeBytes = 50MB # 可改为你想要的阈值,例如 100MB → 100MB
<p>$shell = New-Object -ComObject Shell.Application
$recycleBin = $shell.Namespace(0xA) # 0xA = recycle bin namespace</p><h1>获取所有回收站项</h1><p>$items = $recycleBin.Items()</p><h1>筛选并删除小文件</h1><p>$items | ForEach-Object {
$size = if ($<em>.Size -match '^\d+$') { [int64]$</em>.Size } else { 0 }
if ($size -lt $MaxSizeBytes) {
try {
$<em>.InvokeVerb("delete") # 触发右键删除(即永久删除)
} catch {
Write-Warning "跳过无法删除项:$($</em>.Name)"
}
}
}
</p>
⚠ 注意:此操作不可逆,请先测试(可临时把 $_.InvokeVerb("delete") 替换为 Write-Host "将删除: $($_.Name) - 大小: $size" 预览效果)。
三、设置定时任务自动运行
用任务计划程序让脚本每天凌晨执行:
- 保存脚本为
C:\Scripts\Clean-RecycleBin-Safe.ps1; - 以管理员身份打开“任务计划程序”,创建基本任务;
- 触发器设为每日指定时间;
- 操作选择“启动程序”,程序填
powershell.exe,参数填:-ExecutionPolicy Bypass -File "C:\Scripts\Clean-RecycleBin-Safe.ps1"; - 勾选“不管用户是否登录都要运行”,并启用“不存储密码时只限于运行已加密的脚本”(若需后台静默运行)。
四、增强安全性与日志记录(可选)
添加简单日志便于排查:
$logPath = "C:\Logs\RecycleBin-Cleanup.log" "[$(Get-Date)] 开始清理..." | Add-Content $logPath # …(中间删除逻辑)… "[$(Get-Date)] 清理完成,共处理 $($items.Count) 项。" | Add-Content $logPath
建议搭配磁盘空间监控(如 Get-PSDrive C | Select-Object Used,Free)在日志中记录剩余空间,更直观评估效果。











