go下载所有依赖包 go get -d -v ./...
//批量替换文件名相同文字和批量追加文件名前缀
package main
import (
"fmt"
"io/ioutil"
"os"
"strings"
)
//初始化成功和失败的次数
var successNum, errorNum int = 0, 0
func main() {
var (
//初始化菜单按钮
menuNum int
)
//获取真实路径
dirPath, _ := os.Getwd()
//把需要替换的所有文件都放在files这个目录下进行操作
dirPath += "/files/"
fmt.Println("***请把需要操作的所有文件,放在 files 文件夹下,没有的请新建一个files文件夹,执行程序.ext 和 files 文件夹是同级关系***")
for{
fmt.Println("\n======请选择功能======")
fmt.Println("1.批量替换文件名相同文字\n2.批量添加文件名前缀\n3.退出")
fmt.Print("请输入菜单数字:")
//监听键盘输入
fmt.Scanln(&menuNum)
switch menuNum {
case 1:
//初始化 需要替换的文字和新的文字 变量
var srcTitle, dscTitle string
//重置成功次数,防止运行多次一直累积
successNum = 0
//重置失败次数,防止运行多次一直累积
errorNum = 0
fmt.Println("===文件名批量替换同文字 Ctrl+C 可提前终止程序===")
fmt.Print("请输入需要替换的文字:")
//监听输入
fmt.Scanln(&srcTitle)
fmt.Print("请输入新文字:")
//监听输入
fmt.Scanln(&dscTitle)
fmt.Println("正在替换中,请稍后...")
//开始执行文件名替换
repeatTitle(srcTitle, dscTitle, dirPath)
fmt.Printf("成功更新%d个文件,未更新%d个文件!\n", successNum, errorNum)
case 2:
//初始化前缀变量
var prefixStr string
//重置成功次数,防止运行多次一直累积
successNum = 0
//重置失败次数,防止运行多次一直累积
errorNum = 0
fmt.Println("===文件名批量追加前缀 Ctrl+C 可提前终止程序===")
fmt.Print("请输入前缀文字:")
//监听输入
fmt.Scanln(&prefixStr)
//开始追加文件名的前缀
addPrefix(prefixStr,dirPath)
fmt.Printf("\n成功追加%d个文件,未追加%d个文件!\n",successNum,errorNum)
case 3:
fmt.Println("我们下次再见~")
os.Exit(-1)
default:
fmt.Println("请输入正确的菜单编号!\n")
}
}
}
//替换文件中指定的字符串
//srcTitle 需要替换的文字
//dscTitle 更新的文字
//dir 更新的文件夹
func repeatTitle(srcTitle, dscTitle, dir string) {
//读取文件夹
fs, err := ioutil.ReadDir(dir)
if err != nil {
fmt.Println("读取文件夹失败:", err)
return
}
//遍历文件夹内的文件
for _, file := range fs {
//如果当前是文件夹,继续递归调用自身,实现无限文件夹的文件替换
if file.IsDir() == true {
repeatTitle(srcTitle, dscTitle, dir+file.Name()+"/")
}
//获取文件的名称
fileName := file.Name()
//判断文件名是否存在过需要替换的文字前缀
if strings.Index(fileName, srcTitle) < 0 {
continue
}
//新的文件名称
newName := strings.Replace(fileName, srcTitle, dscTitle, 1)
//旧的文件真实路径
oldFile := dir + "/" + fileName
//新的文件真实路径
newFile := dir + "/" + newName
//开始重命名文件名
err := os.Rename(oldFile, newFile)
if err != nil {
//错误的次数统计
errorNum++
} else {
//成功的次数统计
successNum++
}
}
}
//批量给文件追加前缀
//prefix 前缀文字
//dir 追加文件的目录
func addPrefix(prefix, dir string) {
//读取文件夹
fs, err := ioutil.ReadDir(dir)
if err != nil {
fmt.Println("读取文件夹失败:", err)
return
}
//遍历文件夹内的文件
for _, file := range fs {
//如果当前是文件夹,继续递归调用自身,实现无限文件夹的文件追加
if file.IsDir() == true {
addPrefix(prefix, dir+file.Name()+"/")
} else {
//获取文件名
fileName := file.Name()
//如果文件名已经存在了相同的前缀,则跳过
if strings.Index(fileName, prefix) == 0 {
continue
}
//新的文件名,新增了前缀
newName := prefix + fileName
//旧的文件
oldFile := dir + "/" + fileName
//新文件
newFile := dir + "/" + newName
//重命名文件
err := os.Rename(oldFile, newFile)
if err != nil {
//错误的次数统计
errorNum++
} else {
//成功的次数统计
successNum++
}
}
}
}
原文地址:https://www.52pojie.cn/thread-1550510-1-1.html
© 版权声明
本站网络名称:
乐商网络
本站永久网址:
https://ishoud.com
网站侵权说明:
本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长QQ810066660删除处理。
1 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
2 本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
3 本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。
1 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
2 本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
3 本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。
THE END
暂无评论内容