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

口述编程实战:5分钟从零写出批量文件重命名工具(vibe-coding第一次实操)

上章学了3个框架——RTC、EMI、SVC。

现在直接动手。

5分钟,从零口述出一个能用的工具。不是Hello World那种玩具,是一个你真的会用的小工具——批量文件重命名器

阿Lee选这个项目是有原因的:

  • 功能简单明确,5分钟真的能做完
  • 实用——谁电脑里没一堆乱七八糟的文件名?
  • 完整——从口述到运行,体验完整的口述编程流程

准备好了?打开Trae,我们开始。

准备工作:30秒

  1. 打开Trae,新建一个项目文件夹
  2. 随便建一个测试文件夹,里面放10个文件,名字乱一点:

plaintext

1

2

3

4

5

6

7

8

9

10

11

IMG_20260101_001.jpg

IMG_20260101_002.jpg

doc_最终版.docx

doc_最终版2.docx

doc_最终版最终版.docx

report-2025-Q4.xlsx

report-2025-Q4-副本.xlsx

screenshot_01.png

screenshot_02.png

未命名.txt

够乱吧?——这还是阿Lee故意收敛了的,真实场景更离谱。

第1轮:用RTC框架起手

在Trae的对话框里输入:

你是一个Python工具开发者,帮我写一个批量文件重命名脚本,功能:把指定文件夹里的文件按规则批量重命名。约束:1)用pathlib不用os库 2)必须先预览重命名结果,用户确认后再执行 3)加完整的错误处理 4)命令行运行

这就是RTC框架——角色(Python工具开发者)+任务(批量文件重命名脚本)+约束(4条具体要求)。

等AI生成代码。大概10-15秒。

阿Lee拿到的那一版代码大概长这样:

python

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

from pathlib import Path

def preview_rename(folder_path, rule):

"""预览重命名结果"""

folder = Path(folder_path)

if not folder.exists():

print(f"错误:文件夹 {folder_path} 不存在")

return []

rename_pairs = []

for f in sorted(folder.iterdir()):

if f.is_file():

new_name = rule(f.name)

if new_name != f.name:

rename_pairs.append((f, f.parent / new_name))

return rename_pairs

def execute_rename(rename_pairs):

"""执行重命名"""

success = 0

for old_path, new_path in rename_pairs:

try:

old_path.rename(new_path)

success += 1

except Exception as e:

print(f"重命名失败:{old_path.name} -> {new_path.name},原因:{e}")

print(f"完成!成功重命名 {success}/{len(rename_pairs)} 个文件")

if __name__ == "__main__":

# 规则示例:把文件名中的空格替换为下划线,转小写

folder = input("请输入文件夹路径:")

rule = lambda name: name.replace(" ", "_").lower()

pairs = preview_rename(folder, rule)

if not pairs:

print("没有需要重命名的文件")

else:

print("\n预览重命名结果:")

for old, new in pairs:

print(f" {old.name} -> {new.name}")

confirm = input("\n确认执行?(y/n):")

if confirm.lower() == 'y':

execute_rename(pairs)

else:

print("已取消")

第1版代码能跑,但问题不少——

  • 重命名规则太简单,只能替换空格+转小写
  • 没有支持多种规则的选项
  • 用户得手动输入路径,不方便

这就是RTC起手的典型结果:方向对了,细节不够。没关系,EMI框架来迭代。

第2轮:用EMI框架迭代

在第1版的对话基础上继续说:

在上面的代码基础上,做以下修改:1)加上多种重命名规则:替换指定字符串、添加前缀/后缀、序号重命名 2)让用户选择使用哪种规则 3)路径可以通过命令行参数传入

AI在第1版基础上修改,大概20秒出结果。

阿Lee拿到的第2版增加了这些:

python

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

import argparse

from pathlib import Path

import re

def rule_replace(name, old_str, new_str):

"""规则1:替换指定字符串"""

return name.replace(old_str, new_str)

def rule_prefix(name, prefix):

"""规则2:添加前缀"""

return prefix + name

def rule_suffix(name, suffix):

"""规则3:添加后缀(在扩展名之前)"""

stem = Path(name).stem

ext = Path(name).suffix

return f"{stem}{suffix}{ext}"

def rule_number(name, number, total):

"""规则4:序号重命名"""

ext = Path(name).suffix

return f"{number:0{len(str(total))}d}{ext}"

# ... 预览和执行逻辑同第1版,加上规则选择菜单

好多了!4种规则覆盖了最常见的场景。但还有一个问题——没有撤回功能。万一改错了,文件名回不去。

第3轮:继续EMI迭代

再加一个撤回功能:执行重命名前自动保存一份映射表(旧名→新名),如果用户想撤回,读取映射表恢复原文件名

AI又加了一段:

python

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

import json

UNDO_FILE = ".rename_undo.json"

def save_undo_map(rename_pairs):

"""保存撤回映射"""

undo_map = {str(new): str(old) for old, new in rename_pairs}

with open(UNDO_FILE, 'w', encoding='utf-8') as f:

json.dump(undo_map, f, ensure_ascii=False, indent=2)

def undo_rename():

"""撤回上次重命名"""

if not Path(UNDO_FILE).exists():

print("没有找到撤回记录")

return

with open(UNDO_FILE, 'r', encoding='utf-8') as f:

undo_map = json.load(f)

pairs = [(Path(new), Path(old)) for new, old in undo_map.items()]

execute_rename(pairs)

Path(UNDO_FILE).unlink() # 删除撤回记录

3轮下来,这个工具已经很完整了——4种重命名规则 + 预览确认 + 撤回功能。

运行效果

阿Lee用测试文件夹跑了一遍:

plaintext

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

$ python rename_tool.py ./test_files

请选择重命名规则:

1. 替换字符串

2. 添加前缀

3. 添加后缀

4. 序号重命名

选择:1

输入要替换的字符串:最终版

输入替换为:(留空则删除)

预览重命名结果:

doc_最终版.docx -> doc_.docx

doc_最终版2.docx -> doc_2.docx

doc_最终版最终版.docx -> doc_.docx

⚠️ 检测到重命名后可能冲突:doc_.docx

是否继续?(y/n):n

已取消

看到没?——阿Lee故意没加冲突检测,但AI在第2版里自己加了!这就是RTC框架里"角色"的威力——当你告诉AI"你是一个Python工具开发者",它会自动考虑边界情况。

换一种规则再试:

plaintext

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

选择:4

序号起始值:1

预览重命名结果:

IMG_20260101_001.jpg -> 01.jpg

IMG_20260101_002.jpg -> 02.jpg

doc_最终版.docx -> 03.docx

doc_最终版2.docx -> 04.docx

doc_最终版最终版.docx -> 05.docx

report-2025-Q4.xlsx -> 06.xlsx

report-2025-Q4-副本.xlsx -> 07.xlsx

screenshot_01.png -> 08.png

screenshot_02.png -> 09.png

未命名.txt -> 10.txt

确认执行?(y/n):y

完成!成功重命名 10/10 个文件

干净利落。10个乱七八糟的文件,3秒搞定。

复盘:5分钟里发生了什么

表格

步骤框架耗时做了什么
第1轮RTC1分钟起手,拿到基础版本
第2轮EMI1.5分钟加4种规则+命令行参数
第3轮EMI1分钟加撤回功能
测试手动1.5分钟跑了2遍,验证功能
合计5分钟完整可用的工具

如果传统方式写这个工具呢?阿Lee估算——

  • 写基础重命名逻辑:15分钟
  • 加预览功能:10分钟
  • 加多种规则:20分钟
  • 加撤回功能:15分钟
  • 加错误处理:10分钟
  • 测试调试:20分钟
  • 合计:约90分钟

5分钟 vs 90分钟,提效18倍

这不是夸张,是口述编程的真实数据。AI帮你省掉的不是"思考"的时间,而是"编码+调试"的时间。你只需要想清楚要什么,告诉AI,它帮你写。

阿Lee的复盘心得

3轮口述做完这个小工具,有3个感受特别深:

1. RTC起手的质量决定了整个项目的效率

第1轮我给了4条约束,AI出来的代码方向基本正确。如果我只说"帮我写个重命名工具",大概率要改5轮以上。约束越具体,迭代越少。

2. 每轮只改一个核心需求

第2轮我加了4种规则+命令行参数,看起来改了两件事,但其实都是"丰富功能"这一个方向。如果你一轮里既改功能又改架构,AI容易顾此失彼。

3. 必须跑一遍再迭代

每一轮我都是先运行代码、看效果,再决定下一轮改什么。别光看AI输出的代码觉得"差不多"就继续——"差不多"和"能用"之间差着10个bug。

你刚刚完成了人生中第一次口述编程——是不是比想象中简单?

5分钟,一个小工具,从零到可用。这不是上限,是起点。

下章开始,阿Lee带你做真正的项目——用SVC框架做一个完整的Web应用。5分钟的小工具只是热身,Web应用才是口述编程真正发力的战场。

阿Lee | 10年嵌入式老兵转AI | 口述编程vibe-coding专栏

专栏导航:[Ch1]认知 → [Ch2]工具 → [Ch3]环境 → [Ch4]进阶 → [Ch5]心法 →[Ch6]第一次→ [Ch7-10]实操 → [Ch11]变现 → [Ch12]避坑

http://www.cnnetsun.cn/news/2832438.html

相关文章:

  • 告别十六进制编辑:3步掌握暗黑破坏神2可视化存档编辑器
  • 5分钟永久备份QQ空间:GetQzonehistory让你的青春记忆永不丢失
  • 地震预警系统开发技术方案
  • 避坑指南:用VS2017编译OpenCASCADE 7.3.0,解决Qt项目链接失败问题
  • 想象力编排:生成式AI时代的人机协作新范式
  • 告别手动爬数据!用GEE和CHIRPS V2.0批量下载全球降水数据(附完整JS代码)
  • 从MKW36到MKW38:蓝牙LE嵌入式无线MCU平台迁移实战指南
  • i.MX RT600串行NOR Flash启动配置全解析:从BootROM原理到XIP映像烧录实战
  • 边缘计算正在成为数字化时代的新基础设施
  • 【AI入门知识点】AI里的稀疏和稠密,到底在卷什么?
  • 2026九大AI毕业论文工具横向实测:解锁毕业写作无痛方案
  • 小程序毕业设计-基于springboot+微信小程序的社区医疗服务管理挂号、健康档案、诊疗记录、科室管理小程序的设计与开发(源码+LW+部署文档+全bao+远程调试+代码讲解等)
  • m4s-converter:如何永久保存B站视频的完整指南
  • LPC86x I2C Secondary Bootloader:从原理到实践的嵌入式固件更新方案
  • Proteus原理图整洁大法:用标签和总线告别‘蜘蛛网’连线(附批量标注技巧)
  • 5分钟掌握pywencai:同花顺问财数据获取的完整解决方案
  • 3步打造专业级Minecraft动画:MCprep高效插件完全指南
  • 大模型事实核查能力深度测评:溯源、术语、语境三大核心维度
  • AWTK跨平台GUI开发终极指南:5步掌握SDL2桌面应用构建
  • RookieAI终极指南:3步打造专业级AI自瞄系统
  • ABAP开发避雷指南:为什么WS_REVERSE_GOODS_ISSUE和BAPI_OUTB_DELIVERY_CHANGE不能一起调用?
  • 避坑指南:在Allegro 16.6中调用Cadence原理图模块,这些电源/地和命名错误千万别踩
  • 从IP ToS到Wi-Fi AC:一张图看懂网络优先级穿越各层的完整旅程(附RFC 8325映射表)
  • 小说数据采集分析一体化工具包:Python爬虫+Django后台+MySQL初始化+一键运行
  • 实战演练:实现一个“声控”待办事项应用
  • 2026年上海ToB抖音运营公司精选TOP6榜单:制造工程获客公司评测
  • ps -ef | grep java
  • 从PoseCNN到Yolo-6D:2018年那几篇6D位姿估计论文,现在看还香吗?
  • Platinum-MD:让经典MiniDisc焕发新生的现代化音乐管理工具
  • 跨境元器件采购风险规避实战:从付款条款到物流选择的全面风控指南