在《Go语言100个实战案例》中的 文件与IO操作篇 - 案例17:批量重命名文件 的完整内容,适合初学者实践如何使用 Go 操作文件系统并批量处理文件名。
🎯 案例目标
实现一个小工具,能够批量重命名指定目录下的所有文件,例如统一添加前缀、后缀,或按照顺序编号。
🧩 应用场景
- • 批量重命名图片、视频、文档等
- • 整理爬虫下载的文件
- • 按规则生成项目资源命名
🧠 涉及知识点
- • 使用
os.ReadDir()
读取目录内容 - • 使用
os.Rename()
修改文件名 - • 使用
filepath.Ext()
获取文件扩展名 - • 字符串拼接和格式化
💻 示例代码:为文件添加统一前缀
go
package main
import (
"fmt"
"os"
"path/filepath"
)
func main() {
dir := "./testfiles" // 目标文件夹
prefix := "new_" // 要添加的前缀
// 读取目录下所有文件
files, err := os.ReadDir(dir)
if err != nil {
fmt.Println("读取目录失败:", err)
return
}
for _, file := range files {
if file.IsDir() {
continue // 跳过子目录
}
oldPath := filepath.Join(dir, file.Name())
newName := prefix + file.Name()
newPath := filepath.Join(dir, newName)
// 重命名文件
err := os.Rename(oldPath, newPath)
if err != nil {
fmt.Printf("重命名失败: %s -> %s, 错误: %v\n", oldPath, newPath, err)
} else {
fmt.Printf("重命名成功: %s -> %s\n", oldPath, newPath)
}
}
}
📂 示例目录结构(执行前)
css
testfiles/
├── a.jpg
├── b.jpg
├── c.png
📂 执行后结果
testfiles/
├── new_a.jpg
├── new_b.jpg
├── new_c.png
🛠 技术说明
函数/模块 | 用途说明 |
---|---|
os.ReadDir() |
获取指定路径下的所有文件和文件夹 |
file.IsDir() |
判断是否为文件夹 |
filepath.Join() |
拼接路径,避免平台兼容问题 |
os.Rename() |
执行文件重命名操作 |
🧪 拓展用法:添加编号重命名
css
newName := fmt.Sprintf("img_%03d%s", i+1, filepath.Ext(file.Name()))
执行结果:
img_001.jpg
img_002.jpg
img_003.png
📌 拓展练习
- • 将所有文件名统一为小写
- • 移除文件名中的特殊字符
- • 支持同时添加前缀和后缀
- • 将文件按类型重命名,例如:
photo_001.jpg
、doc_001.pdf
✅ 小结
本案例让你掌握了如何读取目录文件并批量重命名,这一技能在数据清洗、媒体资源管理中非常实用。通过灵活控制文件名规则,你可以轻松构建批处理工具。