当前位置: 首页 > news >正文

文件批量重命名(办公)脚本

目录

演示效果

一、核心功能

二、使用方法

1. 准备文件

2. 执行脚本

三、注意事项

四、脚本源码:(Python)


大家可以自行免费下载博主的脚本文件👇

文件重命名(办公)脚本(免费下载)

演示效果

文件批量重命名脚本演示视频

这个脚本的核心功能是按姓名匹配文件并批量重命名,能自动读取姓名学号清单和预设命名格式,将杂乱的文件(如作业)统一规范命名,同时生成操作日志记录过程

一、核心功能

1.自动匹配文件:只要目标文件名中包含 “姓名学号清单” 里的姓名(如 “招笑猫”),就能自动关联对应的学号,无需完整匹配文件名

2.灵活套用格式:从命名格式文件中读取规则(如 “6 班 {学号}{姓名} 第一次大学物理 C 作业”),自动替换{姓名}{学号}占位符,保留原文件扩展名(如.pdf、.docx)

3.重名冲突处理:若新文件名已存在,会自动在末尾加数字后缀(如 “xxx_1.pdf”“xxx_2.pdf”),避免文件覆盖

4.详细日志记录:生成含时间戳的日志文件,记录每个文件的处理结果(成功 / 失败 / 跳过),方便后续核对

二、使用方法

使用前需准备 3 个关键文件,且需将它们放在同一个文件夹中(与待重命名的文件也放在此文件夹),具体步骤如下:

1. 准备文件

脚本文件:确保batch_rename.py已保存到目标文件夹

姓名学号清单(name_id_list.txt):按 “姓名,学号” 格式填写(逗号可加空格),支持用//#开头添加注释行,示例如下:

# 这是注释行,会被跳过

招笑猫,24111111

蹦跶狗,24022222  # 行尾注释也有效

命名格式文件(rename_format.txt):填写含{姓名}{学号}占位符的命名规则,无需加扩展名,示例如下:

# 格式示例,会自动保留原扩展名

6班{学号}{姓名}第一次大学物理C作业

2. 执行脚本

1.在脚本所在文件夹按下Shift+鼠标右键,打开Powershell窗口

2.输入命令python batch_rename.py并回车,启动脚本

3.脚本运行完成后,按任意键关闭窗口,查看重命名结果和自动生成的日志文件(如rename_log_20250101_123456.txt

三、注意事项

1.文件位置要求:待重命名的文件、脚本文件、name_id_list.txtrename_format.txt必须在同一文件夹,否则脚本会报错 “未找到文件”

2.排除文件不处理:脚本会自动跳过 4 类文件,无需手动移走:

脚本本身(batch_rename.py

姓名学号清单(name_id_list.txt

命名格式文件(rename_format.txt

自动生成的日志文件(rename_log_xxxxxx.txt

1.姓名匹配规则:仅支持 “文件名含姓名” 的匹配(如 “24012177 李昊航作业.pdf” 能匹配 “李昊航”),若文件名不含清单中的姓名(如 “作业 1.pdf”),会被标记为 “未匹配跳过”

2.权限与文件占用

若提示 “重命名失败”,需先关闭正在打开的目标文件(如已用 PDF 阅读器打开的作业)

确保当前用户有文件夹的 “写入权限”(如避免放在 C 盘系统目录)

1.日志核对:运行后务必查看日志文件,确认成功 / 失败 / 跳过的文件,避免遗漏未处理的文件

四、脚本源码:(Python)

import os
from datetime import datetime# -------------------------- 基础配置(无需修改) --------------------------
# 文件名定义(需与实际文件一致)
ID_LIST_FILE = "name_id_list.txt"    # 姓名学号清单
FORMAT_FILE = "rename_format.txt"    # 命名格式文件
# 日志文件(自动生成,含时间戳)
LOG_FILE = f"rename_log_{datetime.now().strftime('%Y%m%d_%H%M%S')}.txt"def write_log(content, is_print=True):"""写日志并可选在控制台打印"""with open(LOG_FILE, "a", encoding="utf-8") as f:f.write(f"{datetime.now().strftime('%Y-%m-%d %H:%M:%S')} - {content}\n")if is_print:print(content)def load_name_id_map():"""加载姓名-学号映射(处理中文无压力)"""name_id_map = {}if not os.path.exists(ID_LIST_FILE):write_log(f"错误:未找到姓名学号清单文件「{ID_LIST_FILE}」", is_print=True)exit(1)with open(ID_LIST_FILE, "r", encoding="utf-8") as f:lines = f.readlines()for line_num, line in enumerate(lines, 1):line = line.strip()# 跳过注释行(// 或 # 开头)和空行if not line or line.startswith(("//", "#", "::")):continue# 按逗号分割姓名和学号(允许逗号前后有空格)parts = [p.strip() for p in line.split(",")]if len(parts) != 2:write_log(f"警告:第{line_num}行格式错误(需「姓名,学号」),已跳过:{line}")continuename, student_id = partsif name and student_id:name_id_map[name] = student_idwrite_log(f"已加载:姓名={name} → 学号={student_id}")if not name_id_map:write_log("错误:姓名学号清单中无有效数据,无法继续", is_print=True)exit(1)return name_id_mapdef load_rename_format():"""加载重命名格式(如:6班{学号}{姓名}大学物理C第一次作业)"""if not os.path.exists(FORMAT_FILE):write_log(f"错误:未找到命名格式文件「{FORMAT_FILE}」", is_print=True)exit(1)with open(FORMAT_FILE, "r", encoding="utf-8") as f:# 读取第一行有效内容(跳过空行和注释)for line in f.readlines():line = line.strip()if not line or line.startswith(("//", "#", "::")):continuewrite_log(f"已加载命名格式:{line}")return linewrite_log("错误:命名格式文件中无有效格式,无法继续", is_print=True)exit(1)def batch_rename(name_id_map, rename_format):"""批量重命名核心逻辑:只要文件名含姓名就匹配"""success_count = 0fail_count = 0skip_count = 0# 获取当前文件夹所有文件(排除脚本、清单、格式、日志文件)exclude_files = {os.path.basename(__file__),  # 当前脚本ID_LIST_FILE,FORMAT_FILE,LOG_FILE}for file_name in os.listdir("."):# 跳过文件夹和需排除的文件if os.path.isdir(file_name) or file_name in exclude_files:continueold_file_path = os.path.join(".", file_name)matched = Falsetarget_name = ""target_id = ""# 遍历姓名清单,匹配文件名中的姓名(含部分匹配,如“李昊航”匹配“24012177李昊航作业.pdf”)for name, student_id in name_id_map.items():if name in file_name:target_name = nametarget_id = student_idmatched = Truebreakif not matched:write_log(f"跳过:{file_name}(未在文件名中找到清单中的姓名)")skip_count += 1continue# 生成新文件名:替换占位符 + 保留原扩展名file_ext = os.path.splitext(file_name)[1]  # 原文件扩展名(如.pdf)new_file_name = rename_format.replace("{姓名}", target_name).replace("{学号}", target_id) + file_extnew_file_path = os.path.join(".", new_file_name)# 处理重名:若新文件名已存在,加后缀(如“xxx_1.pdf”)duplicate_count = 1while os.path.exists(new_file_path):new_file_name = f"{rename_format.replace('{姓名}', target_name).replace('{学号}', target_id)}_{duplicate_count}{file_ext}"new_file_path = os.path.join(".", new_file_name)duplicate_count += 1# 执行重命名try:os.rename(old_file_path, new_file_path)write_log(f"成功:{file_name} → {new_file_name}(姓名:{target_name},学号:{target_id})")success_count += 1except Exception as e:write_log(f"失败:{file_name}(原因:{str(e)},姓名:{target_name},学号:{target_id})")fail_count += 1# 输出最终统计write_log("=" * 50)write_log(f"处理完成!统计结果:")write_log(f"成功重命名:{success_count} 个文件")write_log(f"重命名失败:{fail_count} 个文件(建议关闭占用文件后重试)")write_log(f"未匹配跳过:{skip_count} 个文件")write_log(f"日志文件已保存至:{LOG_FILE}")write_log("=" * 50)if __name__ == "__main__":write_log("=" * 50, is_print=False)write_log("批量重命名工具启动", is_print=False)write_log("=" * 50, is_print=False)# 加载配置name_id_map = load_name_id_map()rename_format = load_rename_format()# 执行批量重命名batch_rename(name_id_map, rename_format)# 防止运行后窗口直接关闭(按任意键退出)input("按任意键退出...")

http://www.dtcms.com/a/540723.html

相关文章:

  • 学习日记22:Adaptive Rotated Convolution for Rotated Object Detection
  • 十二要素应用
  • 同步、异步、阻塞、非阻塞的区别
  • 网站建设技术培训电商基地推广
  • 使用注解将日志存入Elasticsearch
  • 【STM32】WDG看门狗
  • 无锡市建设安全监督网站全国统一核酸检测价格
  • 做网站购买备案域名织梦高端html5网站建设工作室网络公司网站模板
  • 2.CSS3.(4).html
  • 记一次诡异的“偶发 404”排查:CDN 回源到 OSS 导致 REST API 失败
  • C++笔记(面向对象)类模板
  • Selenium IDE下载和安装教程(附安装包)
  • Quartz框架实现根据设置的cron表达式进行定时任务执行
  • linux20 线程同步--信号量
  • 内核的文件预取逻辑及blockdev的相关配置
  • [特殊字符] Web 字体裁剪优化实践:把 42MB 字体包瘦到 1.6MB
  • 平滑过渡,破解多库并存:浙人医基于金仓KFS的医疗信创实战解析
  • 做经营性的网站需要注册什么条件网站构思
  • Answer企业社区实战:零成本搭建技术问答平台,远程协作效率提升300%!
  • “听书”比“看书”更省力?
  • 大连 手机网站案例网站定位方案
  • window安装MYSQL5.5出错:a windows service with the name MYSQL alreadyexists....
  • 珠海做网站报价影响网站排名的因素
  • 6.1.2.2 大数据方法论与实践指南-离线任务SQL 任务开发规范
  • Java 大视界 -- Java 大数据在智能交通高速公路收费系统优化与通行效率提升实战(429)
  • 网站可以做怀孕单吗平面设计图数字标识
  • 图神经网络入门:手写一个 VanillaGNN-从邻接矩阵理解图神经网络的消息传递
  • 网站模版带后台酒类招商网站大全
  • 营销型网站创建网页制作三剑客通常指
  • 【笔试真题】- 电信-2025.10.11