工具分享02 | Python批量文件重命名工具
- GUI工具
- 2025-07-05
- 944热度
- 0评论
大家好,我是欧K~
本期使用Python的Tkinter制作一个批量修改文件名的工具,可以选择文件类型、自定义添加前缀、后缀及文件名字符替换(可单选、可多选)。希望对大家有所帮助,如有疑问或者需要改进的地方可以联系小编。
1. 运行流程
1.1 工具面板

1.2 选择原文件夹、目标文件夹,添加前缀并预览

1.3 执行重命名操作

1.4 重命名完成

1.5 执行结果

1.6 添加前缀及后缀

执行结果

1.7 替换部分名称

执行结果

1.8 前缀+后缀+替换

执行结果

2. 绘图
2.1 框架结构布局
def create_widgets(self):
# 文件夹选择部分
folder_frame = ttk.LabelFrame(self.root, text="文件夹设置", style="Bold.TLabelframe")
folder_frame.pack(fill="x", padx=10, pady=10, ipadx=5, ipady=5)
# 源文件夹
ttk.Label(folder_frame, text="源文件夹:").grid(row=0, column=0, sticky="w", padx=5, pady=5)
self.source_var = tk.StringVar()
source_entry = ttk.Entry(folder_frame, textvariable=self.source_var)
source_entry.grid(row=0, column=1, sticky="we", padx=5, pady=5)
ttk.Button(folder_frame, text="浏览...", command=self.select_source_folder).grid(row=0, column=2, padx=5, pady=5)
# 目标文件夹
ttk.Label(folder_frame, text="目标文件夹:").grid(row=1, column=0, sticky="w", padx=5, pady=5)
self.dest_var = tk.StringVar()
dest_entry = ttk.Entry(folder_frame, textvariable=self.dest_var)
dest_entry.grid(row=1, column=1, sticky="we", padx=5, pady=5)
ttk.Button(folder_frame, text="浏览...", command=self.select_dest_folder).grid(row=1, column=2, padx=5, pady=5)
# 文件类型筛选部分
ttk.Label(folder_frame, text="文件类型筛选:").grid(row=2, column=0, sticky="w", padx=5, pady=5)
type_frame = ttk.Frame(folder_frame)
type_frame.grid(row=2, column=1, columnspan=2, sticky="w", padx=5, pady=5)
# 创建文件类型复选框
self.type_vars = {}
for i, ext in enumerate(self.file_types):
self.type_vars[ext] = tk.BooleanVar(value=True)
cb = ttk.Checkbutton(
type_frame,
text=ext,
variable=self.type_vars[ext]
)
cb.grid(row=0, column=i, padx=5, sticky="w")
# 全选/取消全选按钮
ttk.Button(
type_frame,
text="全选",
command=lambda:self.toggle_all_types(True)
).grid(row=0, column=len(self.file_types)+1, padx=5, sticky="w")
ttk.Button(
type_frame,
text="取消全选",
command=lambda:self.toggle_all_types(False)
).grid(row=0, column=len(self.file_types)+2, padx=5, sticky="w")
operation_frame = ttk.LabelFrame(self.root, text="重命名操作 (可多选)", style="Bold.TLabelframe")
operation_frame.pack(fill="x", padx=10, pady=10, ipadx=5, ipady=5)
# 创建垂直排列的操作框架
vertical_frame = ttk.Frame(operation_frame)
vertical_frame.pack(fill="x", padx=5, pady=5)
# 前缀操作组 - 垂直排列
prefix_frame = ttk.Frame(vertical_frame)
prefix_frame.pack(fill="x", pady=5)
# 前缀复选框
prefix_check = ttk.Checkbutton(
prefix_frame,
text="添加前缀",
variable=self.prefix_enabled
)
prefix_check.pack(side="left", padx=(0, 10))
2.2 添加菜单
def create_menu(self):
"""创建菜单栏"""
mainmenu = Menu(self.root)
# 帮助菜单
aboutmenu = tk.Menu(mainmenu, tearoff=False)
aboutmenu.add_command(label="联系作者", command=self.about_command)
mainmenu.add_cascade(label="帮助", menu=aboutmenu)
2.3 加载文件
def load_files(self):
source = self.source_var.get()
ifnotsource:
return
try:
self.files = []
for f in os.listdir(source):
file_path = os.path.join(source, f)
if os.path.isfile(file_path):
# 检查文件扩展名是否在选中的类型中
ext = os.path.splitext(f)[1].lower()
if ext inself.get_selected_types():
self.files.append(f)
self.status_var.set(f"找到 {len(self.files)} 个文件")
except Exception as e:
messagebox.showerror("错误", f"无法读取文件列表: {str(e)}")
self.status_var.set("读取文件列表出错")
2.4 按规则执行重命名操作
def apply_rename_rules(self, filename):
original = filename
order = self.order_var.get()
if order == "前缀→后缀→替换":
ifself.prefix_enabled.get():
prefix = self.prefix_var.get().strip()
filename = prefix + filename if prefix else filename
ifself.suffix_enabled.get():
name, ext = os.path.splitext(filename)
suffix = self.suffix_var.get().strip()
filename = name + suffix + ext if suffix else filename
ifself.replace_enabled.get():
search = self.search_var.get().strip()
replace = self.replace_var.get().strip()
filename = filename.replace(search, replace) if search else filename
2.5 异常提示
def execute_rename(self):
# 检查是否有至少一个操作被选中
ifnot any([self.prefix_enabled.get(), self.suffix_enabled.get(), self.replace_enabled.get()]):
messagebox.showwarning("警告", "请至少选择一种重命名操作")
return
# 获取当前选中的文件类型
self.selected_types = self.get_selected_types()
ifnotself.selected_types:
messagebox.showwarning("警告", "请至少选择一种文件类型")
return
source = self.source_var.get()
destination = self.dest_var.get()
ifnotsource:
messagebox.showwarning("警告", "请先选择源文件夹")
return
ifnotdestination:
destination = source
# 确认操作
ifnot messagebox.askyesno("确认", "确定要执行重命名操作吗?"):
return
3. 更多可视化代码+数据
公众号后台回复:工具002