基于XLSX列表批量重命名3000+文件并做匹配校验
跨平台批量重命名解决方案(匹配XLSX列表)
一、专用软件方案
Bulk Rename Utility(Windows优先,macOS/Linux可通过Wine运行)
- 将XLSX列表导出为CSV格式(Excel/Numbers中选择「另存为CSV」)
- 打开软件加载目标文件夹,切换到「导入」标签导入CSV文件
- 在「匹配」规则中启用部分文本匹配(比如勾选「包含」,用列表核心关键词对应文件名片段)
- 预览重命名结果无误后执行,支持批量预览规避错误
Renamer(macOS)
- XLSX转CSV后,导入软件的「列表重命名」模块
- 开启「模糊匹配」功能,设置匹配阈值(如80%相似度),让软件自动关联文件名与列表条目
- 支持按列表编号排序,自动跳过列表中不存在的文件,保留编号空缺
二、Python脚本方案(跨平台通用)
灵活性最强,适合有基础的用户自定义匹配规则:
- 先安装依赖:
pip install pandas fuzzywuzzy python-Levenshtein - 脚本示例:
import os import pandas as pd from fuzzywuzzy import fuzz # 读取XLSX列表,假设列名为"编号"和"正确名称" df = pd.read_excel("文件名列表.xlsx") target_dir = "目标文件夹路径" file_list = os.listdir(target_dir) for filename in file_list: file_path = os.path.join(target_dir, filename) if not os.path.isfile(file_path): continue # 提取文件名主体(去除扩展名) name_body = os.path.splitext(filename)[0] # 计算每个列表条目的部分匹配相似度 match_scores = df["正确名称"].apply(lambda x: fuzz.partial_ratio(name_body, x)) best_idx = match_scores.idxmax() best_score = match_scores.max() # 设置相似度阈值(可根据实际情况调整) if best_score >= 70: ext = os.path.splitext(filename)[1] new_name = f"{df.loc[best_idx, '编号']}. {df.loc[best_idx, '正确名称']}{ext}" new_path = os.path.join(target_dir, new_name) # 避免重名冲突 if not os.path.exists(new_path): os.rename(file_path, new_path) print(f"重命名:{filename} → {new_name}") else: print(f"跳过:{new_name} 已存在")
- 使用说明:修改脚本中的路径、列名和阈值,先测试少量文件,确认匹配准确后再批量执行
三、macOS Automator工作流方案
适合无编程基础的mac用户:
- 打开Automator,新建「文件夹动作」,选择目标文件夹
- 添加「获取文件夹内容」动作,勾选「重复项处理」为「忽略」
- 添加「运行Shell脚本」动作,Shell选择
/usr/bin/python3,粘贴上述Python脚本核心逻辑(注意调整路径参数) - 可选:结合Numbers自动化
- 将XLSX导入Numbers,创建包含「原文件名片段」「新文件名」的表格
- 用「快捷指令」的「读取表格」+「重命名文件」动作,设置「包含匹配」规则批量执行
注意事项
- 操作前务必备份所有文件,避免误操作导致数据丢失
- 根据文件名混乱程度调整模糊匹配阈值,平衡匹配准确率与覆盖范围
- 完全无法匹配的文件单独收集后手动处理
内容的提问来源于stack exchange,提问作者user32593453




