咕噜文件重命名

从昨天开始,我试图编写一个可以更改文件名的脚本/程序。除了学习golang,我还开始制作动画,出于某种原因,Illustrator将我制作的每个.png文件命名为“name_working空间1副本.png”和“*副本(数字).png”。我厌倦了手动重命名这些文件,今天我找到了这个代码并修改了它的1行,以摆脱“_working空间1副本”,但只能从那些有数字的文件中删除。这让我留下了2个文件,它们是我的动画的第一帧,它们是 - “name_working空间1.png”;“name_working空间 1 副本.png”。我完全可以通过将这2个空白留空来接受它,但是由于我试图学习golang,我想问我是否可以改进它以替换每个文件名。我本周一开始学习。



import (

    "fmt"

    "log"

    "os"

    "path/filepath"

    "regexp"

)


func currentDir() {

    dir := "D:\\GoLang\\src\\gocourse\\renamefile\\rename"

    file, err := os.Open(dir)

    if err != nil {

        log.Fatalf("failed using this directory %s", err)

    }

    defer file.Close()


    list, err := file.Readdirnames(0)

    if err != nil {

        log.Fatalf("failed reading directory: %s", err)

    }


    re := regexp.MustCompile("_working space 1 copy ")

    for _, name := range list {

        oldName := name

        fmt.Println("Old name - ", oldName)

        newName := re.ReplaceAllString(oldName, "$1")

        fmt.Println("New Name - ", newName)

        err := os.Rename(filepath.Join(dir, oldName), filepath.Join(dir, newName))

        if err != nil {

            log.Printf("error renaming file: %s", err)

            continue

        }

        fmt.Println("File names have been changed")

    }

}


func main() {

    currentDir()

}

ball_working空间 1.png -->球-1.png;

ball_working空间 1 副本.png --> 球-2.png;

ball_working空间 1 副本 1.png --> 球-3.png;

ball_working空间 1 副本 2.png --> 球-4.png 等。


守候你守候我
浏览 122回答 2
2回答

慕勒3428872

下面是代码的重新实现。但是,它并不完整,因为您需要更好地澄清名称之前的样子,以及它们之后应该是什么样子。package mainimport (   "os"   "path/filepath"   "strings")func main() {   dir := `D:\GoLang\src\gocourse\renamefile\rename`   list, err := os.ReadDir(dir)   if err != nil {      panic(err)   }   for _, each := range list {      name := each.Name()      newName := strings.ReplaceAll(name, "_working space 1 copy", "")      os.Rename(filepath.Join(dir, name), filepath.Join(dir, newName))   }}

Qyouu

我想你可以只解析每个文件名的第一部分,直到它遇到下划线。一个函数,用于说明是否确定要提取的文件始终以相同的符号“_”结尾。fileNames := []string{"ball_working space 1.png", "ball_working space 1 copy.png","ball_working space 1 copy 1.png", "ball_working space 1 copy 2.png"}func parseName(names []string) {    res := []string{""}    for ind, val := range names {        data := val[:strings.IndexByte(val, '_')] // reads until the hardcoded symbol        data += "-" + strconv.Itoa(ind)        res = append(res, data)    return res}然后,您将拥有一个包含所有“正确”文件名的切片,您可以按照自己的喜好方式解压缩它。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go