Go语言实战案例-批量重命名文件

在《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.jpgdoc_001.pdf

✅ 小结

本案例让你掌握了如何读取目录文件并批量重命名,这一技能在数据清洗、媒体资源管理中非常实用。通过灵活控制文件名规则,你可以轻松构建批处理工具。

相关推荐
用户675704988502几秒前
手摸手教你玩 Jenkins,一次搞懂 CI/CD!(第二章:发布之sshPublisher)
后端·jenkins
用户6757049885027 分钟前
手摸手教你玩 Jenkins,一次搞懂 CI/CD!(第一章:部署)
后端·jenkins
一路向北North20 分钟前
Spring Security OAuth2.0(20):完善环境配置
java·后端·spring
从零开始的代码生活_35 分钟前
C++ string 详解:常用接口、字符串算法与深拷贝实现
开发语言·c++·后端·学习·算法
65岁退休Coder1 小时前
LangChain v1.3.4 笔记 - 01 模型的连接/输出、消息、提示词模板
后端
笃行3501 小时前
数据库优化深度科普向|外连接消除底层原理,国产数据库优化器设计思路拆解
后端
苍何2 小时前
耗时 7 天,我们开源了腾讯 WorkBuddy 实战蓝皮书(建议收藏)
前端·后端
青山木2 小时前
Redis 高可用的最后一公里:Cluster 分片、Gossip 与故障转移全流程
数据库·redis·后端·缓存
老孙讲技术2 小时前
巡店系统笔记:listDeviceDetailsByPage 台账 + bindDeviceLive 辅码流最小闭环
后端·物联网
名字还没想好☜2 小时前
Go 内存逃逸分析:什么时候变量跑到堆上
开发语言·算法·性能优化·golang·go·内存逃逸