乐于分享
好东西不私藏

十分钟用AI做了文件批量重命名工具

十分钟用AI做了文件批量重命名工具

AI来了,总得做点有用的

最近很多厉害的家伙直接vibe coding出来很多好玩的应用,我自己倒是没什么想法,而且也没有充值用上API,但是有一些实际的需求,就用AI来试试了。这次是需要批量重命名一些文件,网上找来找去都没有简单可用的,就自己动手弄了一个。

01

第一版小工具

第一版是用豆包弄的。跟豆包说清楚我的需求,返回的结果基本能达到我的要求了:

向豆包提我的需求

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

工具界面

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

错误修改

来看看效果:

修改成功提示

02

第二版小工具

第一版小工具对我来说基本就够用了,但是既然要发出来,那就需要弄成更通用方便的工具,比如第一版小工具还有几点没处理好:

  • 文件名只能是阿拉伯数字,没法加前缀或者后缀

  • 选择文件的时候只能将文件夹里的所有文件一起选择,没法只选择一部分

  • 没法手动给选中的文件进行拖拽排序

用过ai的人应该都知道,让ai从0到1来开发是比较简单的,但是在1之上加点什么功能是比较麻烦的,第一版三个小问题需要处理,我就直接用trae来从头开始做全新的一版。

trae相当于一个代码编辑器,在代码开发中是比直接跟豆包对话那种方式要便捷多了,而且还是免费的(白嫖党狂喜)。

根据第一版的缺点,我在提示词中进行了更完善的描述,在右边文件区域可以看到,它自动给我生成了几个代码文件,运行之后,我们就得到了第二版小工具

trae界面

来看看第二版小工具效果:

左边文件列表就是选中的文件,可以进行手动排序,也可以去掉不需要的文件;右边上方就是自定义文件统一名字,差别就在于每个文件会按照排序结果有一个阿拉伯数字,下方就是文件改名之后的预览结果,点击执行之后,就完成了批量重命名,如果有异常,也可以撤销操作。
整个小工具在批量重命名这个功能上是比较完善的了,为了更方便使用,直接打包成exe文件,也就是常见的软件,双击即可使用:
整个开发过程极其简单,主要是功能简单,没有异常的话十分钟就可以搞定。自从ai出现之后,很多小工具自己直接开发,比上网去查找现成可能还要简单。
ai时代可能将没有软件的概念,当手机上进行软件开发也能信手拈来的时候,整个手机大概只需要一个ai软件和一些大软件就可以了,一句唤起,就能完成大部分的任务,这样才是正确的ai时代。
如果有需要用到这个小工具的,可以后台私信“文件命名”获取,不过目前只有Windows系统的,其他系统暂时没有弄出来。
各位要是有什么好的想法,也可以留言一下,用ai弄一下真的很好玩

第一版代码:
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_folder    folder = filedialog.askdirectory(title="选择要重命名文件的文件夹")    if folder:        selected_folder = folder        entry_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("警告""起始数字必须是正整数!")            return    except 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 = 0    current_num = start_num    for 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 = 1        temp_new_path = new_path        while 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 += 1            current_num += 1        except 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(FalseFalse)# 设置界面样式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()