自动清理历史剪贴板脚本

wen 实用脚本 1

本文目录导读:

自动清理历史剪贴板脚本

  1. 使用方法
  2. 自定义配置
  3. 注意事项
  4. 更多控制选项
  5. 替代方案
# 自动清理历史剪贴板脚本
# 适用于 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

设置开机自启

  1. 将脚本或 VBS 文件放入启动文件夹:
    • Win+R,输入 shell:startup
    • 放入快捷方式

自定义配置

修改脚本开头的参数:

  • $CleanupIntervalMinutes:清理执行间隔(默认30分钟)
  • $MaxClipboardAgeMinutes:保留历史的最大时间(默认60分钟)

注意事项

  1. 隐私保护:脚本会清除所有剪贴板历史,包括可能正在使用的临时数据
  2. 管理员权限:某些操作(如重启服务)需要管理员权限
  3. 系统兼容性:仅适用于 Windows 10 版本 1809 及以上(支持剪贴板历史功能)
  4. 性能影响:建议将清理间隔设置在 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)
}

替代方案

如果不想使用脚本,可以考虑:

  1. 组策略计算机配置 > 管理模板 > 系统 > OS 策略 中禁用剪贴板历史
  2. 第三方工具:使用 Ditto、ClipCache 等自带清理功能的剪贴板管理器
  3. 手动清理:定期按 Win+V 手动删除历史记录

请根据实际需要选择合适的清理策略。

抱歉,评论功能暂时关闭!