300行文件分类 Python 脚本,如何拥有参数窗口、右键菜单、全局快捷键和定时任务

简介: 这是一款仅307行的Python文件分类脚本,依托「不忙脚本盒子」实现GUI界面、右键菜单、全局热键(如Ctrl+Alt+F)和定时任务——全部能力由TOML配置声明生成,**零行交互代码手写**。专注核心逻辑:7种智能分类模式(后缀、类型、时间、大小等),纯标准库,无需pip依赖,安全移动不删除,Win10/11开箱即用。(239字)

300 行 Python 文件分类脚本:GUI / 右键 / 热键 / 定时,一行交互代码都没写

脚本清单:main.py 共 307 行,配套 bm-scripts-box-rc.toml 配置文件 57 行,仅此两份。

它的能力看起来和代码体量很不匹配:

  • 友好的GUI交互窗口
  • 快捷键执行文件整理
  • 右键菜单快速执行文件整理
  • 支持定时执行文件整理

按照传统开发思路,单单交互界面就要几百行;右键菜单需要操作注册表;全局热键要调用 Win32 API;定时任务要对接系统计划任务或者维护常驻后台进程。四项功能从头手写,保守估算两千行起步。

但这四项,我一行业务代码都没有写。

我只聚焦一件核心逻辑:接收文件夹路径,按照预设规则对文件分组、移动。这部分核心代码大约 130 行。
界面、右键、热键、定时调度,全部由不忙脚本盒子读取 TOML 配置自动生成。下面拆解整套实现思路,以及这次选择不自己开发外壳的原因。

demo2.gif

脚本本身只负责:文件分类逻辑

先说明:外围能力由盒子提供,但分类规则全部是自研实现。一共 7 种分类模式:

  • 按后缀名:.jpg、.pdf 等后缀各自独立建文件夹
  • 按文件类型:归集为文档、视频、音频、图像、压缩包、执行脚本、代码、设计文件、其他,共 9 大类(日常最常用)
  • 按关键词:仅匹配带指定关键词的文件,其余文件保持不动
  • 按创建时间 / 修改时间:自动生成 2026年/03月 两级时间目录
  • 按文件大小:分为 4 档:<10MB、10MB~100MB、100MB~1GB、>1GB
  • 按文件数量:每 N 个文件拆分一个目录,适合大批量图片分片归档

配图:整理前后目录对比截图,左侧是四百多个杂乱文件,右侧自动分成 9 个类型文件夹

使用方式

脚本不是独立 EXE,交互入口、触发方式都依托不忙脚本盒子:

  1. 访问 bm-box.cn 下载安装(Windows10 及以上 64 位)
  2. 打开盒子,进入脚本市场,搜索「文件分类」安装
  3. 打开脚本卡片,选择目标文件夹、选定分类规则,点击执行

Python 运行环境由盒子托管;脚本仅使用 Python 标准库,版本要求≥3.8,无需额外 pip 安装依赖。
右键菜单、全局快捷键、定时任务这三种启动方式,同样在盒子内配置开启。

四项能力,靠一份 TOML 配置声明实现

脚本和交互层完全解耦。所有界面控件、触发入口,都写在配置文件里,盒子读取配置自动生成能力。

1. 参数弹窗面板

没有手动绘制任何 UI 控件。在 TOML 中声明输入项、参数、联动显隐规则即可:

[[bmscriptsbox.inputs]]
name = "target_dir_path"
label = "目标文件夹(可多选)"
type = "list"
pick = "folders"

[[bmscriptsbox.params]]
name = "mode"
label = "分类方式"
type = "str"
default = "extension"
choices = ["extension", "type", "keywords", "creation_time",
           "modification_time", "size", "quantity"]
choice_labels = { extension = "按后缀名", type = "按文件类型", keywords = "按关键词" }

[[bmscriptsbox.params]]
name = "keywords"
label = "关键词"
type = "str"
when = { field = "mode", eq = "keywords" }
  • pick = "folders":直接渲染文件夹多选器,不用手动实现文件选择弹窗
  • when 条件联动:选中「按关键词」才展示关键词输入框;选中「按数量」,才出现每组文件数量输入框

如果自己开发,文件夹多选、表单校验、选项联动显隐、状态保存,每一块都要写大量前端 / UI 代码。

2. 资源管理器右键菜单

[bmscriptsbox.triggers.context_menu]
enabled = true
targets = ['background', 'directory']
  • background:文件夹空白处右键
  • directory:选中文件夹后右键

菜单项由盒子自动写入、管理。点击菜单时,盒子自动把选中目录路径传给脚本。
不用操作注册表,不用处理路径空格、管理员权限不足、卸载残留清理等一堆坑。

3. 全局快捷键

[bmscriptsbox.triggers.shortcut]
enabled = true
input_type = "active"

热键在盒子内自定义绑定(例如 Ctrl+Alt+F)。
input_type = "active":按下快捷键时,自动读取当前资源管理器激活窗口的文件夹路径。切到下载文件夹按快捷键,就整理下载;切到桌面,就整理桌面。
脚本完全无感,只接收路径入参,不需要编写热键注册、消息循环逻辑。

4. 定时自动任务

[bmscriptsbox.schedule]
enabled = true

调度能力由盒子内置调度器负责,到点自动拉起脚本。我配置的是每天 19:00 自动整理下载文件夹。

亮点:定时任务复用同一套参数表单。目标目录、分类规则和手动执行配置完全一致,不需要单独开发一套自动执行参数、增加 --auto 命令分支。之前自研定时版本,就是因为两套参数逻辑,代码越维护越混乱。

脚本与盒子的通信规则

盒子启动脚本时,向命令行传入一个 JSON 文件路径。脚本读取 JSON 拿到上下文,执行完成直接退出。无 SDK、无基类依赖,脚本单独拷贝出来也可以独立运行。

JSON 示例:

{
  "environment": { "invoke_mode": "scheduled" },
  "data":       { "target_dir_path": ["C:/Users/me/Downloads"] },
  "params":     { "mode": "extension", "keywords": "", "per_folder": 100 }
}
  • data:目标文件夹列表
  • params:分类配置参数
  • environment.invoke_mode:调用来源标识:manual(手动点击 / 右键 / 快捷键)、scheduled(定时)、node(被其他脚本联动调用)

脚本里只有一段简短判断适配不同调用场景:

if (env or {}).get("invoke_mode") in ("scheduled", "node"):
    print("已退出", flush=True)
    sys.exit(0)

手动执行时,结尾有 5 秒倒计时等待用户查看日志;无人值守的定时 / 联动调用,直接退出,避免阻塞调度队列。
这个边界场景很容易被忽略,如果全套自研,需要自己设计上下文参数、保证所有调用链路都正确传递标识。

gui.png

如果全部从零手写,工作量对比

表格

能力 自研实现方案 预估工作量
参数窗口 Tkinter/PyQt 开发表单,编写校验、联动显隐回调、多选文件夹逻辑 1~2 天,仅达到可用
右键菜单 winreg 操作注册表,处理空格路径、权限异常、卸载清理 至少 1 天,清理逻辑最容易出 bug
全局快捷键 Win32 RegisterHotKey + 消息循环,处理热键冲突、卡死问题 半天,消息循环坑较多
定时任务 调用 schtasks,或者 APScheduler 常驻进程 成本都不低

四项叠加,很容易从「一个周末完工」变成拖两周。

不是写不出来。前两版我就是自己写的:第一版纯命令行,输路径很麻烦;第二版上了 Tkinter 界面,但每次改交互需求都要调整 UI 布局,打包之后还要应对杀毒软件误报。两次迭代都消耗大量精力在和业务无关的外壳代码上。

这次换思路:核心分类逻辑自研,通用桌面交互外壳交给盒子。写完即可交付分享给其他人使用。

安全设计原则

文件整理工具一旦出错,代价是用户文件,所以做了大量保守限制:

  • 仅执行移动 shutil.move,代码内没有任何删除逻辑
  • 重名自动后缀递增,永远不覆盖原有文件
  • 关键词模式:不匹配关键词的文件完全不改动
  • 只处理当前一级文件,不递归遍历子文件夹,防止误操作根目录造成大范围改动
  • 单个文件移动失败不中断整体流程,单独记录失败文件与原因
  • 先一次性读取全部待处理文件列表,再执行移动,避免遍历过程中目录结构变化导致漏处理

常见疑问

Q:脚本会删除文件吗?
A:不会,只有移动操作,没有删除代码。

Q:支持 Win11 吗?Mac 呢?
A:Win10 / Win11(64 位)可用;暂不支持 Mac。

Q:需要手动安装 Python 环境吗?
A:盒子自带环境,开箱即用;单独运行源码需要 Python3.8+。

Q:定时任务需要额外配置吗?
A:参数表单和手动执行一致,配置一次保存即可。

Q:怎么获取这个脚本?
A:安装不忙脚本盒子,在脚本市场搜索「文件分类」,当前版本 v1.4.0。

收尾

回到最开始的问题:307 行代码到底都写了什么?
130 行分类核心逻辑,其余是参数解析、日志、异常处理和注释。GUI、右键、热键、定时,全部没有手写。

这套体验,来自 不忙脚本盒子。
它提供了一套面向 Windows 脚本的声明式底座:只需一份 TOML 配置,自动生成可视化表单、右键菜单、全局快捷键、定时任务,同时托管 Python 运行环境,简化脚本分发与分享。

不用再重复造桌面交互轮子,开发者聚焦业务逻辑即可。普通用户也无需接触命令行和依赖,开箱即用。
如果你也想低成本开发、分享 Windows 自动化脚本,可以试试不忙脚本盒子。

盒子GitHub仓库:/bm-qihengzhi/bmscriptsbox

相关文章
|
4月前
|
缓存
阿里云百炼Token Plan计费解析:1000 Credits 对应 Tokens 数量及使用场景
阿里云百炼Token Plan以Credits统一计费,1000 Credits可支持数十次短文本问答(如qwen3.6-flash),或少量图像生成(如qwen-image-2.0),或几次复杂推理(如qwen3.7-max)。标准/高级/尊享坐席月费198/698/1398元,含2.5万/10万/25万Credits。阿里云百炼官网:https://t.aliyun.com/U/fPVHqY
|
7天前
|
JSON 自然语言处理 JavaScript
一文搞懂 Windows 脚本管理器:不忙脚本盒子的运行时隔离、界面生成与分发链路设计
本文详解「不忙脚本盒子」——Windows专属脚本管理器,首创桌面端运行时隔离(多语言独立环境+物理复用)、声明式界面生成(JSON参数自动渲染表单)与去中心化分发链路(GitHub直连+社区索引),填补桌面自动化工具生态空白。开源、透明、仅限Win10/11。(239字)
一文搞懂 Windows 脚本管理器:不忙脚本盒子的运行时隔离、界面生成与分发链路设计
|
1天前
|
弹性计算 运维 监控
用阿里云 ECS 跑一套 WebP 批处理
本文介绍了一套基于阿里云ECS与Python/Pillow的博客图片批量优化方案:自动缩放超大图、转为高质量WebP、保留原图与目录结构,并通过多进程提升效率。脚本详述EXIF校正、Alpha处理、并发调优及效果评估,兼顾实用性与可复现性。
|
1天前
|
数据采集 开发者
水水水水水水水水水水水水时代
量化策略回测亮眼、实盘却大幅回撤?根源常在于历史K线数据质量差:爬虫易遇反爬、缺失、复权错误、时间戳错位等问题。专业合规的股票K线接口,正成为量化研发刚需。
|
1天前
|
弹性计算 人工智能 双11
2026年阿里云双11云服务器活动汇总:轻量云抢购、云服务器99元与199元新购续费同价,热门实例特惠
2026年阿里云双11云服务器活动已铺开,价格从轻量应用服务器38元/年一路延伸到13.8万元的GPU实例。入门层是轻量2核2G(38元秒杀、68元直购)与2核4G(9.9元/月、199元/年);进阶层为ECS经济型e实例99元/年、通用算力型u1实例199元/年,两款新老同享且活动期内新购续费同价,适合长期锁成本;更高配置有u2i年付3折与第九代c9i/g9i/r9i六四折。此外还按个人开发者、AI创造者、一人公司及大中小企业分层提供专属套餐。选购关键仍是先明确自身需求,再核对规格、带宽与续费规则。
|
6月前
|
人工智能
阿里云百炼全模型通用抵扣AI节省计划是什么意思,如何使用?
阿里云AI通用型节省计划是预付费折扣套餐:每月承诺最低消费(如10元),即可享约50%调用折扣。自动抵扣百炼平台150+大模型(Qwen、DeepSeek、GLM等)的按量费用,覆盖推理、工具调用等,但不含调优与部署。额度当月有效、不结转。新手可先用7000万Token免费额度。
|
弹性计算 开发工具 对象存储
ECS实例通过OSS内网地址访问OSS资源
ECS实例通过OSS内网地址访问OSS资源
857 0
|
云安全 安全 网络安全
|
5天前
|
JavaScript 安全 前端开发
Nodejs Brotli decoder 代码执行漏洞 (CVE-2026-111497)10629
Node.js发布安全更新修复Brotli解码器高危RCE漏洞(CVE-2026-111497),建议受影响版本用户立即升级。
1920 1

热门文章

最新文章