go语言实现多线程批量修改多文件目录下文件名
package main
import (
"fmt"
"io/ioutil"
"os"
"path"
"strings"
"sync"
)
var wg sync.WaitGroup
func main() {
wg.Add(1)
// 目录
p := "C:\\Users\\zjw\\Documents\\Java高级开发工程师"
// 要被去掉的文件名称中的字符串
subStr := "【xxxxx】"
go RenameFiles(p, subStr)
wg.Wait()
}
func RenameFiles(pa string, subStr string) {
fileInfos, err := ioutil.ReadDir(pa)
if err != nil {
panic(err)
}
for _, fileInfo := range fileInfos {
if fileInfo.IsDir() {
wg.Add(1)
go RenameFiles(path.Join(pa, fileInfo.Name()), subStr)
} else {
var fname = rmStr(fileInfo.Name(), subStr)
newFileName := path.Join(pa, fname)
err := os.Rename(path.Join(pa, fileInfo.Name()), newFileName)
if err != nil {
fmt.Println("重命名失败: ", err)
}
}
fmt.Println(path.Join(pa,fileInfo.Name()))
}
wg.Done()
}
func rmStr(str1, str2 string) string {
if strings.Contains(str1, str1) {
split := strings.Split(str1, str2)
return strings.Join(split, "")
} else {
return str1
}
}