前置准备
需准备2个免费开源工具,操作零门槛:
- Python 3.8+,下载地址:https://www.python.org/ftp/python/3.11.4/python-3.11.4-amd64.exe,安装时必须勾选Add Python to PATH,否则后续命令无法执行;
- watchdog库(监控文件夹变化),安装命令:
pip install watchdog==2.3.1;
实操步骤
步骤1:编写自动归档脚本
打开记事本,复制以下完整代码,保存为archive_auto.py(建议存桌面):
```python
import os
import hashlib
import shutil
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
配置区:修改为你的绝对路径,替换「你的用户名」为Windows登录名
WATCH_FOLDER = r"C:\Users\你的用户名\Downloads"
ARCHIVE_FOLDER = r"C:\Users\你的用户名\Documents\档案库"
文件分类规则,可自行增减后缀
FILE_CATEGORIES = {
"文档": [".doc", ".docx", ".txt", ".pdf", ".xls", ".xlsx", ".ppt", ".pptx"],
"图片": [".jpg", ".jpeg", ".png", ".gif", ".bmp", ".svg"],
"视频": [".mp4", ".avi", ".mov", ".flv", ".wmv"],
"压缩包": [".zip", ".rar", ".7z", ".tar", ".gz"]
}
生成文件MD5,用于重复文件检测
def get_file_md5(file_path):
hash_md5 = hashlib.md5()
with open(file_path, "rb") as f:
for chunk in iter(lambda: f.read(4096), b""):
hash_md5.update(chunk)
return hash_md5.hexdigest()
创建分类文件夹,不存在则自动生成
def create_category_folders():
for cat in FILE_CATEGORIES.keys():
os.makedirs(os.path.join(ARCHIVE_FOLDER, cat), exist_ok=True)
os.makedirs(os.path.join(ARCHIVE_FOLDER, "其他"), exist_ok=True)
处理单个文件:分类、去重、移动
def process_file(file_path):
跳过临时文件(Excel临时文件、系统临时文件)
if file_path.endswith(".tmp") or os.path.basename(file_path).startswith("~$"):
return
仅处理文件,跳过文件夹
if not os.path.isfile(file_path):
return
匹配文件分类
file_ext = os.path.splitext(file_path)[1].lower()
target_category = next((cat for cat, exts in FILE_CATEGORIES.items() if file_ext in exts), "其他")
target_path = os.path.join(ARCHIVE_FOLDER, target_category)
重复文件检测与重命名
file_md5 = get_file_md5(file_path)
for root, _, files in os.walk(target_path):
for f in files:
f_full = os.path.join(root, f)
if get_file_md5(f_full) == file_md5:
new_name = f"{os.path.splitext(os.path.basename(file_path))[0]}_{file_md5[:6]}{file_ext}"
shutil.move(file_path, os.path.join(target_path, new_name))
print(f"重复文件归档:{new_name}")
return
无重复直接移动
shutil.move(file_path, os.path.join(target_path, os.path.basename(file_path)))
print(f"文件归档成功:{os.path.basename(file_path)}")
监听文件夹变化的事件类
class AutoArchiveHandler(FileSystemEventHandler):
def on_created(self, event):
process_file(event.src_path)
if __name__ == "__main__":
create_category_folders()
observer = Observer()
observer.schedule(AutoArchiveHandler(), WATCH_FOLDER, recursive=False)
observer.start()
print(f"已启动监控:{WATCH_FOLDER}")
print"按Ctrl+C可停止监控")
try:
while True:
pass
except KeyboardInterrupt:
observer.stop()
observer.join()
```
核心提醒:必须修改WATCH_FOLDER和ARCHIVE_FOLDER,将「你的用户名」替换为你Windows实际登录名,比如用户名「王华」,则路径改为C:\Users\王华\Downloads,否则脚本路径错误无法运行。
步骤2:测试脚本功能
按下Win+R输入cmd回车打开命令提示符;执行命令切换到脚本目录(比如脚本在桌面):cd Desktop;运行脚本:python archive_auto.py;往Downloads放一个测试文件(比如新建docx),等待3秒,打开Documents\档案库的「文档」文件夹,若看到该文件则正常;若报错,执行pip list确认watchdog已安装成功。
步骤3:设置开机自动启动(后台运行)

脚本需长期后台运行,通过Windows任务计划配置开机启动:
- 按Win键搜索「任务计划程序」打开;
- 右侧点击「创建任务」;
- 「常规」标签:任务名称填「档案自动归档」,勾选「不管用户是否登录都要运行」,勾选「使用最高权限运行」;
- 「触发器」标签:点击「新建」,选择「启动时」,确定;
- 「操作」标签:点击「新建」,操作选「启动程序」,程序填:
C:\Users\你的用户名\AppData\Local\Programs\Python\Python311\python.exe(Python路径,若已加PATH可直接填python),添加参数填:"C:\Users\你的用户名\Desktop\archive_auto.py"(脚本绝对路径,加引号防空格报错);
- 其他标签保持默认,确定后输入你的Windows登录密码,完成设置。
重要:任务计划里的Python和脚本路径必须和实际路径完全一致,否则开机后任务无法启动。
常见问题排查
问题1:脚本运行后文件未移动
检查WATCH_FOLDER是否为系统Downloads路径;临时文件会自动跳过,需等下载完成再测试;若路径含中文,代码里用r开头的原始字符串无需调整。
问题2:任务计划启动失败
核对Python和脚本路径,若用相对路径需确保Python已加系统环境变量;输入的Windows登录密码必须正确,权限不足会导致任务失败。
问题3:重复文件未重命名
确认归档目录已存在同内容文件,若为刚创建的文件,等待脚本扫描完成;MD5逻辑适配大文件,小文件无影响,可删除测试文件后重试。