吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6834|回复: 52
收起左侧

[原创工具] windows下 批量添加文件名前缀+替换文件名重复文字小工具-golang实现

  [复制链接]
cxj123 发表于 2021-11-24 15:14

大家好,继续学习golang的过程中,又学习到了文件操作,这里制作了一个:批量添加文件名前缀+替换文件名重复文字小工具

因为在网络上下载一些学习资料,很多文件名都带有统一的前缀,不想一个个删除,就制作了这个小工具。

功能很简单
功能1: 就是批量把某些文件的文件名,具有相同文字的给替换成自己的或者删除。
功能2: 批量在文件名的前面添加统一的一个前缀

演示替换功能:
a1.png " alt="" />
a2.png " alt="" />
a3.png " alt="" />
a4.png " alt="" />

演示添加前缀功能:
a5.png " alt="" />

功能就是这样,附上下载地址:https://www.lanzouw.com/iAC9Uwukp1i



免费评分

参与人数 12吾爱币 +17 热心值 +11 收起 理由
yihan01 + 1 + 1 谢谢@Thanks!
蓦然回首 + 1 谢谢@Thanks!
chao8709 + 1 + 1 我很赞同!
zpzwz + 1 + 1 谢谢@Thanks!
MHSKY318 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
darklure + 1 + 1 谢谢@Thanks!
b5520170 + 1 + 1 我很赞同!
harlem1215 + 1 + 1 我很赞同!
WXJYXLWMH + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
ytkxw + 1 + 1 谢谢@Thanks!
stone0702 + 1 + 1 谢谢@Thanks!感谢发布原创作品,吾爱破解论坛因你更精彩!
风之暇想 + 7 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| cxj123 发表于 2021-11-24 15:17
本帖最后由 cxj123 于 2021-11-24 15:19 编辑

使用时记得把文件放在 files 文件夹内,最后附上go源码
[Golang] 纯文本查看 复制代码
//批量替换文件名相同文字和批量追加文件名前缀
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++
                        }
                }
        }
}
 楼主| cxj123 发表于 2021-12-5 08:56
nullable 发表于 2021-12-4 18:40
好不容易看到一个goher,顺便请教一下,除了colly和chromedp,有没有其他更简单的框架

我也刚学习golang,还没学框架,我也帮不了你了~
stone0702 发表于 2021-11-24 16:33
之前用过某苗的。后来因为系统原因无法正常使用了,感谢楼主分享的源码,强迫症福音
lsy1980 发表于 2021-11-24 16:48
感谢分享原创作品!
jun57663796 发表于 2021-11-24 17:05
感觉麻烦
WXJYXLWMH 发表于 2021-11-24 17:32
方便实用 感谢发布原创作品 只是前缀后面不支持空格
 楼主| cxj123 发表于 2021-11-24 17:49
WXJYXLWMH 发表于 2021-11-24 17:32
方便实用 感谢发布原创作品 只是前缀后面不支持空格

对的,可以用其他符号代替的
nicaicaiwoshi 发表于 2021-11-24 17:52
谢谢大佬!~
头像被屏蔽
wusongrong 发表于 2021-11-24 18:30
提示: 作者被禁止或删除 内容自动屏蔽
zhuangbo 发表于 2021-11-24 19:28
比较实用,感谢付出和分享!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 提醒:禁止复制他人回复等『恶意灌水』行为,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-6 12:30

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表