在《Go語言100個實戰案例》中的?文件與IO操作篇 - 案例17:批量重命名文件?的完整內容,適合初學者實踐如何使用 Go 操作文件系統并批量處理文件名。
🎯 案例目標
實現一個小工具,能夠批量重命名指定目錄下的所有文件,例如統一添加前綴、后綴,或按照順序編號。
🧩 應用場景
- ? 批量重命名圖片、視頻、文檔等
- ? 整理爬蟲下載的文件
- ? 按規則生成項目資源命名
🧠 涉及知識點
- ? 使用?
os.ReadDir()
?讀取目錄內容 - ? 使用?
os.Rename()
?修改文件名 - ? 使用?
filepath.Ext()
?獲取文件擴展名 - ? 字符串拼接和格式化
💻 示例代碼:為文件添加統一前綴
package?mainimport?("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)}}
}
📂 示例目錄結構(執行前)
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() | 執行文件重命名操作 |
🧪 拓展用法:添加編號重命名
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
? 小結
本案例讓你掌握了如何讀取目錄文件并批量重命名,這一技能在數據清洗、媒體資源管理中非常實用。通過靈活控制文件名規則,你可以輕松構建批處理工具。