十分钟用AI做了文件批量重命名工具
“AI来了,总得做点有用的”
01
—
第一版小工具
第一版是用豆包弄的。跟豆包说清楚我的需求,返回的结果基本能达到我的要求了:

向豆包提我的需求
豆包给了我一段代码,我新建一个文档,修改为py后缀,代码复制进去,直接点击运行(代码放后面,可以直接用):

工具界面
这样,我想要的文件批量重命名工具基本就能用了,当然中途也有其他一些错误,我把错误提示交给豆包,它给我返回修改好的代码:

错误修改
来看看效果:

修改成功提示

02
—
第二版小工具
第一版小工具对我来说基本就够用了,但是既然要发出来,那就需要弄成更通用方便的工具,比如第一版小工具还有几点没处理好:
-
文件名只能是阿拉伯数字,没法加前缀或者后缀
-
选择文件的时候只能将文件夹里的所有文件一起选择,没法只选择一部分
-
没法手动给选中的文件进行拖拽排序
用过ai的人应该都知道,让ai从0到1来开发是比较简单的,但是在1之上加点什么功能是比较麻烦的,第一版三个小问题需要处理,我就直接用trae来从头开始做全新的一版。
trae相当于一个代码编辑器,在代码开发中是比直接跟豆包对话那种方式要便捷多了,而且还是免费的(白嫖党狂喜)。
根据第一版的缺点,我在提示词中进行了更完善的描述,在右边文件区域可以看到,它自动给我生成了几个代码文件,运行之后,我们就得到了第二版小工具:

trae界面
来看看第二版小工具效果:


import osimport reimport tkinter as tkfrom tkinter import filedialog, messagebox, ttk# 全局变量存储选中的文件夹路径selected_folder = ""def extract_number(filename):"""从文件名中提取数字,用于排序(处理0_1、0_2或1_1、1_2这类格式):param filename: 原始文件名:return: 提取的数字(用于排序),若没有则返回0"""# 匹配 数字_数字 格式的部分,提取最后一个数字match = re.search(r'(\d+)_(\d+)', filename)if match:# 优先取第二个数字(0_1取1,1_2取2),保证排序正确return int(match.group(2))# 匹配单独的数字match_single = re.search(r'\d+', filename)if match_single:return int(match_single.group())return 0def select_folder():"""选择文件夹并显示路径"""global selected_folderfolder = filedialog.askdirectory(title="选择要重命名文件的文件夹")if folder:selected_folder = folderentry_folder.delete(0, tk.END)entry_folder.insert(0, folder)def rename_files():"""核心重命名逻辑"""if not selected_folder:messagebox.showwarning("警告", "请先选择文件夹!")return# 获取起始数字try:start_num = int(entry_start.get().strip())if start_num < 1:messagebox.showwarning("警告", "起始数字必须是正整数!")returnexcept ValueError:messagebox.showwarning("警告", "请输入有效的数字!")return# 获取文件夹内的所有文件(排除子文件夹)files = [f for f in os.listdir(selected_folder)if os.path.isfile(os.path.join(selected_folder, f))]if not files:messagebox.showinfo("提示", "选中的文件夹内没有文件!")return# 按原文件名的数字顺序排序files_sorted = sorted(files, key=extract_number)# 开始重命名rename_count = 0current_num = start_numfor file in files_sorted:# 分离文件名和扩展名file_path = os.path.join(selected_folder, file)file_name, file_ext = os.path.splitext(file)# 新文件名(保留扩展名)new_name = f"{current_num}{file_ext}"new_path = os.path.join(selected_folder, new_name)# 处理重名问题(如果新文件名已存在,加后缀)counter = 1temp_new_path = new_pathwhile os.path.exists(temp_new_path):temp_new_path = os.path.join(selected_folder, f"{current_num}_{counter}{file_ext}")counter += 1# 执行重命名try:os.rename(file_path, temp_new_path)rename_count += 1current_num += 1except Exception as e:messagebox.showerror("错误", f"重命名 {file} 失败:{str(e)}")return# 重命名完成提示messagebox.showinfo("成功", f"共成功重命名 {rename_count} 个文件!\n起始数字:{start_num}\n结束数字:{current_num - 1}")# 创建主窗口root = tk.Tk()root.title("文件批量顺序重命名工具")root.geometry("600x200")root.resizable(False, False)# 设置界面样式style = ttk.Style(root)style.theme_use("clam")# 文件夹选择区域frame_folder = ttk.Frame(root, padding="10")frame_folder.pack(fill=tk.X)label_folder = ttk.Label(frame_folder, text="目标文件夹:")label_folder.pack(side=tk.LEFT, padx=5)entry_folder = ttk.Entry(frame_folder, font=("微软雅黑", 10))entry_folder.pack(side=tk.LEFT, fill=tk.X, expand=True, padx=5)btn_select = ttk.Button(frame_folder, text="选择文件夹", command=select_folder)btn_select.pack(side=tk.LEFT, padx=5)# 起始数字设置区域frame_start = ttk.Frame(root, padding="10")frame_start.pack(fill=tk.X)label_start = ttk.Label(frame_start, text="起始数字:")label_start.pack(side=tk.LEFT, padx=5)entry_start = ttk.Entry(frame_start, font=("微软雅黑", 10))entry_start.insert(0, "1") # 默认起始数字为1entry_start.pack(side=tk.LEFT, fill=tk.X, expand=True, padx=5)# 重命名按钮frame_btn = ttk.Frame(root, padding="10")frame_btn.pack(fill=tk.X)# 修复关键行:移除side=tk.CENTER,改用默认的side=tk.TOP + fill=tk.X 实现居中btn_rename = ttk.Button(frame_btn, text="开始重命名", command=rename_files, style="Accent.TButton")btn_rename.pack(pady=5, fill=tk.X, padx=150) # padx=150 控制左右边距实现居中# 运行主循环root.mainloop()
夜雨聆风