本文目录导读:

# 自动清理历史剪贴板脚本
# 适用于 Windows 10/11 剪贴板历史功能
# 设置清理参数
$CleanupIntervalMinutes = 30 # 清理间隔(分钟)
$MaxClipboardAgeMinutes = 60 # 保留剪贴板历史的最大时间(分钟)
# 主循环
while ($true) {
try {
# 获取当前剪贴板内容(用于触发系统剪贴板API)
$null = Get-Clipboard
# 通过注册表清除剪贴板历史
$clipboardHistoryPath = "HKCU:\Software\Microsoft\Clipboard"
# 方法1:清空所有剪贴板历史
if (Test-Path $clipboardHistoryPath) {
Remove-Item -Path "$clipboardHistoryPath\History" -Recurse -Force -ErrorAction SilentlyContinue
Write-Output "[$(Get-Date -Format 'HH:mm:ss')] 已清理剪贴板历史文件夹"
}
# 方法2:重置剪贴板服务
$clipboardService = Get-Service -Name "cbdhsvc*" -ErrorAction SilentlyContinue
if ($clipboardService) {
Stop-Service $clipboardService.Name -Force -ErrorAction SilentlyContinue
Start-Service $clipboardService.Name -ErrorAction SilentlyContinue
Write-Output "[$(Get-Date -Format 'HH:mm:ss')] 已重启剪贴板服务"
}
# 方法3:清空当前剪贴板(可选,注释掉以保留当前内容)
# Set-Clipboard -Value ""
Write-Output "[$(Get-Date -Format 'HH:mm:ss')] 剪贴板清理完成"
} catch {
Write-Warning "清理过程中出现错误: $_"
}
# 等待指定时间后再次清理
Start-Sleep -Seconds ($CleanupIntervalMinutes * 60)
}
使用方法
保存脚本
将上面的代码保存为 Clear-ClipboardHistory.ps1 文件。
运行脚本
方法1:直接运行(需管理员权限)
powershell -ExecutionPolicy Bypass -File "Clear-ClipboardHistory.ps1"
方法2:后台运行(无窗口)
创建 VBS 文件(RunClipboardCleaner.vbs):
CreateObject("WScript.Shell").Run "powershell -ExecutionPolicy Bypass -File ""C:\Path\To\Clear-ClipboardHistory.ps1""", 0, False
设置开机自启
- 将脚本或 VBS 文件放入启动文件夹:
- 按
Win+R,输入shell:startup - 放入快捷方式
- 按
自定义配置
修改脚本开头的参数:
$CleanupIntervalMinutes:清理执行间隔(默认30分钟)$MaxClipboardAgeMinutes:保留历史的最大时间(默认60分钟)
注意事项
- 隐私保护:脚本会清除所有剪贴板历史,包括可能正在使用的临时数据
- 管理员权限:某些操作(如重启服务)需要管理员权限
- 系统兼容性:仅适用于 Windows 10 版本 1809 及以上(支持剪贴板历史功能)
- 性能影响:建议将清理间隔设置在 15 分钟以上,避免频繁操作影响系统性能
更多控制选项
如果需要更精细的控制(如保留最近10条记录),可以使用更复杂的版本:
# 保留最近N条剪贴板记录的版本
$KeepLastRecords = 10
$CleanupIntervalMinutes = 15
while ($true) {
try {
# 访问剪贴板API
$clipboard = Get-Clipboard -Format "Text"
# 获取剪贴板历史文件
$historyPath = "$env:LOCALAPPDATA\Microsoft\Windows\Clipboard"
if (Test-Path $historyPath) {
$historyFiles = Get-ChildItem -Path $historyPath -Recurse -File |
Sort-Object LastWriteTime -Descending
# 删除超出保留数量的旧文件
if ($historyFiles.Count -gt $KeepLastRecords) {
$filesToDelete = $historyFiles | Select-Object -Skip $KeepLastRecords
$filesToDelete | Remove-Item -Force -ErrorAction SilentlyContinue
Write-Output "[$(Get-Date -Format 'HH:mm:ss')] 已保留最近 $KeepLastRecords 条记录"
}
}
} catch {
Write-Warning "清理过程出错: $_"
}
Start-Sleep -Seconds ($CleanupIntervalMinutes * 60)
}
替代方案
如果不想使用脚本,可以考虑:
- 组策略:
计算机配置 > 管理模板 > 系统 > OS 策略中禁用剪贴板历史 - 第三方工具:使用 Ditto、ClipCache 等自带清理功能的剪贴板管理器
- 手动清理:定期按
Win+V手动删除历史记录
请根据实际需要选择合适的清理策略。