首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >用WorkBuddy写了个脚本,我的下载文件夹终于不用手动了

用WorkBuddy写了个脚本,我的下载文件夹终于不用手动了

原创
作者头像
用户12718897
发布2026-08-27 11:57:21
发布2026-08-27 11:57:21
1560
举报

先说我遇到了什么问题

我的下载文件夹长这样——安装包、PDF、图片、压缩包、文档、视频全堆在一起,像是一个没人收拾的杂物间。

每次想找个文件都特别痛苦。上周我要找一份三天前下的合同PDF,在那一堆文件里翻了好几分钟,眼睛都看花了才找到。当时我就想,这太蠢了,为什么我不能让电脑自动帮我分类?

手动建文件夹再一个一个拖进去?我试过,坚持了不到一周就放弃了。刚开始几天还挺有干劲,后来一忙起来就忘了,等到想起来的时候,下载文件夹又堆了几十个新文件,看着就心累,干脆摆烂。

后来我想到了WorkBuddy——它本来就能生成代码,我只需要说清楚我要什么就行。那就试试吧,反正也不用我自己从头写。

我跟#WorkBuddy#

说了什么

打开#WorkBuddy#

,在对话框里我直接打了这么一段话:

帮我写一个Python脚本,把我电脑"下载"文件夹里的文件按类型自动归类到子文件夹,分类包括图片、文档、压缩包、视频、音频、安装包、代码。重名的文件不要覆盖,顺便告诉我一共移动了多少个文件。

就这么一句话,没有加任何专业术语,就是大白话。

过了大概十几秒,它就给我吐出了一整段代码,还附带了解释。说实话我有点意外,本来以为至少要多轮对话才能搞定,结果一次性就出来了。

代码语言:javascript
复制
python
import os
import shutil
from pathlib import Path
from datetime import datetime

# 配置区
SOURCE = Path.home() / "Downloads"

CATEGORIES = {
    "图片": [".jpg", ".jpeg", ".png", ".gif", ".webp", ".svg", ".bmp"],
    "文档": [".pdf", ".doc", ".docx", ".txt", ".md", ".ppt", ".pptx", ".xls", ".xlsx"],
    "压缩包": [".zip", ".rar", ".7z", ".tar", ".gz"],
    "视频": [".mp4", ".mov", ".avi", ".mkv", ".webm"],
    "音频": [".mp3", ".wav", ".flac", ".aac"],
    "安装包": [".exe", ".dmg", ".pkg", ".apk"],
    "代码": [".py", ".js", ".html", ".css", ".json", ".xml", ".java", ".cpp", ".c"]
}

def organize_files():
    if not SOURCE.exists():
        print(f"目录不存在: {SOURCE}")
        return
    
    moved_count = 0
    skipped_count = 0
    
    for file in SOURCE.iterdir():
        if file.is_dir():
            continue
        
        suffix = file.suffix.lower()
        moved = False
        
        for category, extensions in CATEGORIES.items():
            if suffix in extensions:
                target_dir = SOURCE / category
                target_dir.mkdir(exist_ok=True)
                
                target_path = target_dir / file.name
                if target_path.exists():
                    timestamp = datetime.now().strftime("%H%M%S")
                    new_name = f"{file.stem}_{timestamp}{file.suffix}"
                    target_path = target_dir / new_name
                
                shutil.move(str(file), str(target_path))
                moved_count += 1
                moved = True
                print(f"已移动: {file.name} -> {category}/")
                break
        
        if not moved:
            print(f"跳过: {file.name} (未分类)")
            skipped_count += 1
    
    print("\n" + "="*40)
    print(f"整理完成!共移动 {moved_count} 个文件")
    print(f"跳过 {skipped_count} 个文件")
    print("="*40)

if __name__ == "__main__":
    organize_files()

代码本身不算复杂,核心逻辑就是遍历文件、匹配后缀名、然后移动到对应的子文件夹。如果目标文件夹不存在就自动创建,如果重名就加个时间戳区分。

运行的时候遇到的坑

代码拿过来之后我直接保存成 organize_downloads.py ,然后在终端里跑了一下。

第一次跑的时候报错了,提示路径不存在。我检查了一下才发现,我的Windows用户名是中文的,Path.home() 返回的路径里包含了中文,而Python在某些环境下的编码处理会有问题。

解决办法其实很简单,不用 Path.home() ,直接把下载文件夹的绝对路径写死:

代码语言:javascript
复制
python
SOURCE = Path("D:/Downloads")  # 改成你自己的实际路径

改了之后就能正常跑了。

另外还有一个情况,如果你用的是Mac,路径格式会不一样,需要写成 /Users/你的用户名/Downloads 。这些细节WorkBuddy生成的代码里可能不会自动适配,拿到之后要根据自己的系统稍微改一下。

跑完之后的输出大概是这样:

代码语言:javascript
复制
text
已移动: 项目需求文档.pdf -> 文档/
已移动: 风景图片.png -> 图片/
已移动: setup.exe -> 安装包/
已移动: 视频教程.mp4 -> 视频/
跳过: temp.tmp (未分类)

跑了之后的效果

运行完之后,原来的下载文件夹下面多了这几个子文件夹:

  • 图片/
  • 文档/
  • 压缩包/
  • 视频/
  • 音频/
  • 安装包/
  • 代码/

所有文件按后缀名自动分好类,该进哪进哪。那些没识别出来的文件(比如 .tmp 或者一些不常见格式)就留在原地不动,不会被误删或者误移动,这点我觉得设计得挺稳妥的。

我特意看了一下,移动速度很快,一两百个文件几秒钟就处理完了,不会有卡顿。

我还顺手配了个定时任务

脚本跑通了之后我就想,能不能让它每天自动运行一次,省得我手动去点。

然后在WorkBuddy的自动化里面新建了一个任务,配置大致是这样:

  • 任务名称:每日下载文件整理
  • 触发方式:每天下午18:00
  • 执行内容:运行 D:/scripts/organize_downloads.py

填好之后保存,WorkBuddy会自动帮你把调度配置好。第二天下午6点我特意观察了一下,终端自动弹出来跑了一遍,下载文件夹整整齐齐的。

说实话,这种"设置一次就再也不用管"的感觉确实挺爽的。

我改了几个小地方

基础功能跑通之后,我还根据自己的一些使用习惯做了一点小调整,给你们参考一下:

1. 忽略特定文件

我的下载文件夹里经常会有一些正在下载中的临时文件(比如浏览器下载到一半的 .crdownload 文件),这些文件如果在下载过程中被移动,下载就会失败。所以我在遍历的时候加了一个过滤条件:

我的下载文件夹里经常会有一些正在下载中的临时文件(比如浏览器下载到一半的 .crdownload 文件),这些文件如果在下载过程中被移动,下载就会失败。所以我在遍历的时候加了一个过滤条件:

代码语言:javascript
复制
python
ignore_extensions = [".crdownload", ".tmp", ".part"]
if file.suffix.lower() in ignore_extensions:
    continue

2. 把"安装包"单独拎出来

最开始"安装包"和"压缩包"是放在一起的,后来我发现每次下载的软件安装包 .exe 文件太多了,和 .zip 混在一起找起来不方便,就单独拆了一个"安装包"类别。

2. 把"安装包"单独拎出来

最开始"安装包"和"压缩包"是放在一起的,后来我发现每次下载的软件安装包 .exe 文件太多了,和 .zip 混在一起找起来不方便,就单独拆了一个"安装包"类别。

这个完全看个人习惯,你想怎么分就怎么分,改 CATEGORIES 字典就行。

3. 桌面也一起整理了

后来我觉得既然下载文件夹能整理,桌面是不是也可以?我把 SOURCE 改成了 Path.home() / "Desktop" ,效果一样好。如果你愿意,可以复制一份脚本专门整理桌面。

说几个我觉得值得注意的点

  • 第一次用的话先用测试文件夹试一下:别一上来就直接怼真正的下载目录,万一分类逻辑和你想的不一样呢?可以先复制几个文件到一个测试文件夹里跑一遍看看效果。
  • 后缀名列表可以根据自己的需要增删:比如你经常处理 .psd 文件,就在"图片"类别里加上;如果经常处理 .log 日志文件,可以单独加一个"日志"类别。
  • 重名文件的处理策略是加时间戳:这个策略我觉得挺合理的,不会丢任何数据。但如果同一个文件反复运行,可能会出现十几个带时间戳的副本,所以建议设置好了之后定期检查一下。
  • 安全软件可能会弹窗:如果你装了360或者火绒,跑的时候可能会提示"Python正在移动大量文件",点允许就行,这是正常行为。

用了一段时间的真实感受

这个脚本我到现在已经跑了大概两周了,每天自动运行一次。

最直观的变化就是,我再也不用面对那个乱糟糟的下载文件夹了。每次打开下载目录,看到文件整整齐齐地分在对应的文件夹里,心里确实舒服很多。找文件的时候直接去对应的分类文件夹翻,效率比以前高了不少。

而且说实话,整个过程我真正做的就只有两件事:跟WorkBuddy说了一句话,然后复制粘贴保存。如果让我自己从头写这个脚本,虽然也不是写不出来,但至少得查查 shutil.move 的用法、处理一下异常情况、考虑一下边界条件,怎么说也得折腾半小时。现在几分钟就搞定了,省下来的时间干点别的不好吗。

还可以怎么扩展

这个脚本其实只是一个很基础的文件操作,但思路可以复用。我自己打算后面再让WorkBuddy帮我写几个类似的小工具:

  • 批量重命名:把下载的图片按照"日期_序号"格式重新命名
  • 定期清理:自动删除30天以上没打开过的 .tmp 文件
  • 归档备份:每周把文档类的文件自动备份到移动硬盘

如果你也有类似的需求,可以试试用同样的方式让WorkBuddy帮你写代码。关键是要把需求说清楚——要处理什么文件夹、按什么规则分类、异常情况怎么处理——剩下的交给它就行。

总结

整个过程下来我做的事情就是:

  1. 打开WorkBuddy,说了一句话描述需求
  2. 把生成的代码复制保存成 .py 文件
  3. 根据自己电脑的情况改了一下路径
  4. 在终端跑了一遍测试确认没问题
  5. 在WorkBuddy里建了个定时任务让它每天自动跑

就没别的了。

如果你也有那种"重复、机械、有固定规则"的日常操作,不妨试试让WorkBuddy帮你写成自动化脚本。不一定非得会编程,说清楚需求就行了。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 先说我遇到了什么问题
  • 我跟#WorkBuddy#
  • 运行的时候遇到的坑
  • 跑了之后的效果
  • 我还顺手配了个定时任务
  • 我改了几个小地方
  • 说几个我觉得值得注意的点
  • 用了一段时间的真实感受
  • 还可以怎么扩展
  • 总结
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档