[golang]批量修改名称

package main

import (
	"fmt"
	"io/fs"
	"log"
	"os"
	"path/filepath"
	"regexp"
	"strconv"
)

func myWalkFunc(path string, info fs.FileInfo, err error) error {
	ext := ".rmvb"
	// log.Printf("--> path: %v, file: %v, ext: %v", path, info.Name(), filepath.Ext(path))

	if info.IsDir() {
		return nil
	}

	if filepath.Ext(path) != ext {
		return nil
	}

	// get file name without ext
	filename := info.Name()[:len(info.Name())-len(ext)]

	//[电影天堂www.dygod.cn][三国演义][第20集][DVD高清晰版]
	// [电影天堂www.dy2018.net]冰与火之歌:权力的游戏第一季01集中英双字[1024分辨率]
	re := regexp.MustCompile(`-?[0-9]\d*集`)
	strMatch := re.FindString(filename)
	if strMatch == "" {
		return fmt.Errorf("未找到关键字")
	}
	log.Printf("file: %v, match: %v, len=%v\n", filename, strMatch, len(strMatch))
	strMatch = strMatch[:len(strMatch)-len("集")]

	nMatch, err := strconv.Atoi(strMatch)
	if err != nil {
		return err
	}
	strNewFileName := fmt.Sprintf("权力的游戏S01EP%02d.%v", nMatch, ext)
	log.Printf("match: %v, [%v] => [%v]\n", strMatch, filename, strNewFileName)
	os.Rename(info.Name(), strNewFileName)

	return nil
}

func main() {
	fmt.Println("---------------- 批量修改名称 --------------------")
	fmt.Scan()

	curdir, err := os.Getwd()
	if err != nil {
		log.Fatalln(err)
	}
	//retiver dictery
	err = filepath.Walk(curdir, myWalkFunc)
	if err != nil {
		log.Fatalln(err)
	}

	i := 0
	fmt.Scan(&i)
}

posted @   jiftle  阅读(220)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
历史上的今天:
2020-04-10 掌握基于 JWT 实现的 Token 身份认证
2019-04-10 软件设计师教程(第5版)- 前言和目录
2019-04-10 wireshark抓包分析工具的使用
2019-04-10 Tcpdump抓包工具的使用
2017-04-10 windows下vim中文乱码处理
2017-04-10 CentOS6下Haproxy的安装配置
2017-04-10 haproxy做TCP层的负载均衡
点击右上角即可分享
微信分享提示