亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

咕嚕文件重命名

咕嚕文件重命名

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 關注
  • 114 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號