TypechoJoeTheme

Dcr163的博客

统计

golang实现的批量替换文件名相同文字和批量追加文件名前缀

2021-11-24
/
0 评论
/
961 阅读
/
正在检测是否收录...
11/24

golang实现的批量替换文件名相同文字和批量追加文件名前缀

整段代码编译后go build main.go,使用时,请把需要替换的所有文件放在files目录下,main.exe和files是同级目录

//批量替换文件名相同文字和批量追加文件名前缀
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++
            }
        }
    }
}

go
朗读
赞(0)
版权属于:

Dcr163的博客

本文链接:

https://dcr163.cn/582.html(转载时请注明本文出处及文章链接)

评论 (0)

人生倒计时

今日已经过去小时
这周已经过去
本月已经过去
今年已经过去个月

最新回复

  1. William Tardent
    2024-02-27
  2. Maryann Hamer
    2024-02-27
  3. Sanora Pantano
    2024-02-24
  4. aa
    2024-02-21
  5. Kassie Baum
    2024-01-28

标签云