为了账号安全,请及时绑定邮箱和手机立即绑定

咕噜文件重命名

咕噜文件重命名

Go
守候你守候我 2022-08-24 10:56:17
从昨天开始,我试图编写一个可以更改文件名的脚本/程序。除了学习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 等。
查看完整描述

2 回答

?
慕勒3428872

TA贡献1848条经验 获得超6个赞

下面是代码的重新实现。但是,它并不完整,因为您需要更好地澄清名称之前的样子,以及它们之后应该是什么样子。


package main


import (

   "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))

   }

}


查看完整回答
反对 回复 2022-08-24
?
Qyouu

TA贡献1786条经验 获得超11个赞

我想你可以只解析每个文件名的第一部分,直到它遇到下划线。一个函数,用于说明是否确定要提取的文件始终以相同的符号“_”结尾。


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

}

然后,您将拥有一个包含所有“正确”文件名的切片,您可以按照自己的喜好方式解压缩它。


查看完整回答
反对 回复 2022-08-24
  • 2 回答
  • 0 关注
  • 121 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号