Skip to content

Van493/QQCleaner

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 

Repository files navigation

QQ图片自动清理工具

一个强大的PowerShell脚本集合,用于自动清理QQ聊天图片和空文件夹,支持多文件夹配置和灵活的定时任务调度。

📁 项目结构

QQCleaner/
├── Config/
│   └── folders.json        # 配置文件(包含清理和调度设置)
├── Scripts/
│   ├── Clean-QQImages.ps1  # 主清理脚本
│   ├── Setup-Task.ps1      # 定时任务设置脚本(支持多种创建方式)
│   ├── Manage-Config.ps1   # 配置文件管理工具
│   └── Manage-Schedule.ps1 # 调度设置管理工具
└── Logs/                   # 日志目录(自动创建)
    └── QQCleanup_*.log     # 清理日志文件

🚀 快速开始

1. 首次设置

# 1. 创建项目目录
mkdir QQCleaner
cd QQCleaner
mkdir Scripts

# 2. 将提供的脚本保存到 Scripts 文件夹中

# 3. 以管理员身份运行设置脚本
#    右键点击 PowerShell,选择"以管理员身份运行"
Set-ExecutionPolicy RemoteSigned -Force
.\Scripts\Setup-Task.ps1

2. 配置清理文件夹

# 查看当前配置
.\Scripts\Manage-Config.ps1

# 添加新的清理文件夹
.\Scripts\Manage-Config.ps1 -Action add

# 编辑现有配置
.\Scripts\Manage-Config.ps1 -Action edit

📋 脚本功能说明

1. Clean-QQImages.ps1 - 主清理脚本

功能:执行图片清理和空文件夹删除,支持百万级文件处理

参数

# 基本用法
.\Clean-QQImages.ps1

# 测试模式(不实际删除)
.\Clean-QQImages.ps1 -WhatIf

# 指定自定义配置文件
.\Clean-QQImages.ps1 -ConfigPath "D:\MyConfig.json"

特性

  • 高性能处理:支持处理100万+文件和文件夹
  • 智能进度显示:每5000个操作显示进度,每5分钟保活显示
  • 按时间清理:按指定天数清理旧文件
  • 递归空文件夹清理:深度优先删除所有空文件夹
  • 过滤系统文件:跳过隐藏和系统文件(可配置)
  • 详细日志记录:完整记录所有操作和错误信息
  • 内存优化:定期垃圾回收,防止内存溢出
  • 错误重试机制:完善的异常处理和恢复机制

2. Setup-Task.ps1 - 定时任务设置脚本

功能:创建或更新Windows计划任务,支持多种创建方式

参数

# 基本用法(从配置文件读取设置)
.\Setup-Task.ps1

# 强制覆盖现有任务
.\Setup-Task.ps1 -Force

# 指定自定义配置文件和脚本路径
.\Setup-Task.ps1 -ConfigPath "D:\MyConfig.json" -ScriptPath "D:\MyScript.ps1"

特性

  • 多方式创建:自动尝试多种任务创建方法
  • 权限自适应:检测管理员权限并提供备用方案
  • 智能回退:PowerShell失败时自动使用schtasks命令
  • 详细状态反馈:显示任务状态和下次运行时间
  • 配置验证:验证调度配置的有效性

3. Manage-Config.ps1 - 配置管理工具

功能:管理要清理的文件夹配置

用法

# 查看当前配置
.\Manage-Config.ps1

# 添加新文件夹
.\Manage-Config.ps1 -Action add

# 编辑现有配置
.\Manage-Config.ps1 -Action edit

4. Manage-Schedule.ps1 - 调度管理工具

功能:管理定时任务的调度设置

用法

# 查看当前调度设置
.\Manage-Schedule.ps1

# 修改调度设置
.\Manage-Schedule.ps1 -Action set

# 启用调度
.\Manage-Schedule.ps1 -Action enable

# 禁用调度
.\Manage-Schedule.ps1 -Action disable

# 测试配置有效性
.\Manage-Schedule.ps1 -Action test

⚙️ 配置文件说明

配置文件位于 Config/folders.json,格式如下:

{
    "Folders": [
        {
            "Path": "D:\\QQFiles\\Group1",
            "DaysOld": 30,
            "Enabled": true,
            "Description": "工作群聊天图片"
        },
        {
            "Path": "D:\\QQFiles\\Group2",
            "DaysOld": 60, 
            "Enabled": true,
            "Description": "朋友群聊天图片"
        }
    ],
    "GlobalSettings": {
        "LogRetentionDays": 30,
        "SkipHiddenFolders": true,
        "SkipSystemFolders": true
    },
    "ScheduleSettings": {
        "Enabled": true,
        "IntervalType": "Days",    // Days 或 Weeks
        "IntervalValue": 7,        // 间隔数值
        "ExecutionTime": "03:00",  // 执行时间 (HH:mm)
        "RandomDelayMinutes": 60   // 随机延迟分钟
    }
}

配置项说明

清理设置:

  • Path: 要清理的文件夹路径
  • DaysOld: 文件保留天数(超过此天数的文件将被删除)
  • Enabled: 是否启用此文件夹的清理
  • Description: 文件夹描述信息

全局设置:

  • LogRetentionDays: 日志文件保留天数
  • SkipHiddenFolders: 是否跳过隐藏文件夹
  • SkipSystemFolders: 是否跳过系统文件夹

调度设置:

  • Enabled: 是否启用定时任务
  • IntervalType: 间隔类型(Days/周数/Weeks/周数)
  • IntervalValue: 间隔数值
  • ExecutionTime: 执行时间(HH:mm格式)
  • RandomDelayMinutes: 随机延迟分钟数

🔧 高级用法

手动运行清理

# 测试运行(不实际删除)
.\Scripts\Clean-QQImages.ps1 -WhatIf

# 立即执行清理
.\Scripts\Clean-QQImages.ps1

# 清理特定路径
.\Scripts\Clean-QQImages.ps1 -ConfigPath "D:\CustomConfig.json"

调度管理示例

# 设置为每天清理
.\Scripts\Manage-Schedule.ps1 -Action set
# 选择 IntervalType: Days, IntervalValue: 1

# 设置为每周清理
.\Scripts\Manage-Schedule.ps1 -Action set  
# 选择 IntervalType: Weeks, IntervalValue: 1

# 设置为每2周清理
.\Scripts\Manage-Schedule.ps1 -Action set
# 选择 IntervalType: Weeks, IntervalValue: 2

# 应用新的调度设置
.\Scripts\Setup-Task.ps1 -Force

手动创建计划任务(备用方案)

# 每2周执行一次(每周一03:00)
schtasks /Create /TN "QQ多文件夹自动清理任务" /TR "powershell -ExecutionPolicy Bypass -File D:\Scheduled\QQCleaner\Scripts\Clean-QQImages.ps1" /SC WEEKLY /MO 2 /ST 0300 /F

# 每天执行一次
schtasks /Create /TN "QQ多文件夹自动清理任务" /TR "powershell -ExecutionPolicy Bypass -File D:\Scheduled\QQCleaner\Scripts\Clean-QQImages.ps1" /SC DAILY /ST 0300 /F

任务管理命令

# 查看任务状态
Get-ScheduledTask -TaskName "QQ多文件夹自动清理任务"

# 立即运行任务
Start-ScheduledTask -TaskName "QQ多文件夹自动清理任务"

# 删除任务
Unregister-ScheduledTask -TaskName "QQ多文件夹自动清理任务" -Confirm:$false

# 使用schtasks查看
schtasks /Query /TN "QQ多文件夹自动清理任务"

日志管理

# 查看最新日志
Get-Content .\Logs\QQCleanup_*.log -Tail 20

# 监控实时日志
Get-Content .\Logs\QQCleanup_$(Get-Date -Format 'yyyyMMdd').log -Wait

# 清理旧日志
Get-ChildItem .\Logs\*.log | Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-30) } | Remove-Item

🐛 常见问题解决

Q1: 权限不足错误

# 解决方案:以管理员身份运行
# 1. 右键点击 PowerShell
# 2. 选择"以管理员身份运行"
# 3. 重新运行脚本

Q2: 配置文件格式错误

# 重新生成默认配置
Remove-Item .\Config\folders.json -Force
.\Scripts\Clean-QQImages.ps1 -WhatIf

Q3: 计划任务创建失败

# 使用schtasks命令手动创建
schtasks /Create /TN "QQ多文件夹自动清理任务" /TR "powershell -ExecutionPolicy Bypass -File D:\Scheduled\QQCleaner\Scripts\Clean-QQImages.ps1" /SC WEEKLY /MO 1 /ST 0300 /F

Q4: 脚本执行权限问题

# 设置执行策略
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force

📊 性能特性

  • 大规模处理:经过测试支持100万+文件清理
  • 内存优化:分批处理,定期垃圾回收
  • 进度显示:实时进度反馈,避免长时间无响应
  • 错误恢复:跳过错误文件,继续处理其他文件
  • 日志记录:详细的操作日志和错误信息

🔒 安全提示

  1. 测试优先:首次使用务必使用 -WhatIf 参数测试
  2. 数据备份:清理前确认重要文件已备份
  3. 权限要求:计划任务需要管理员权限
  4. 日志监控:定期检查日志确认运行状态
  5. 配置验证:修改配置后使用测试功能验证

📝 版本历史

  • v1.2 (2024-01-01) - 任务创建增强

    • 多方式任务创建(PowerShell + schtasks)
    • 管理员权限检测和提示
    • 更好的错误处理和回退机制
  • v1.1 (2024-01-01) - 调度系统改进

    • 灵活的间隔配置(天/周)
    • 完整的调度管理工具
    • 配置验证和测试功能
  • v1.0 (2024-01-01) - 初始版本

    • 基础文件清理功能
    • 多文件夹配置支持
    • 空文件夹递归删除

🆘 技术支持

如果遇到问题,请按以下步骤排查:

  1. 检查日志:查看 Logs/QQCleanup_*.log 文件
  2. 测试运行:使用 .\Clean-QQImages.ps1 -WhatIf 测试
  3. 验证配置:使用 .\Manage-Schedule.ps1 -Action test 测试配置
  4. 权限检查:确保以管理员身份运行设置脚本

对于大规模清理任务(100万+文件),建议:

  • 首次运行使用测试模式
  • 监控内存使用情况
  • 分批次处理不同文件夹

重要提示: 使用前请务必进行测试!默认配置为每7天清理一次,请根据实际需求调整。对于生产环境,建议先在测试环境验证配置。

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published