1. 程式人生 > 其它 >批量重新命名/刪除檔案

批量重新命名/刪除檔案

平時下載檔案或者視訊的命名很多帶有長長的網址字首,比如一些程式設計的教學視訊,如果對其進行重新命名觀感上舒服多了;還有一些的壓縮包,解壓之後,資料夾中包含廣告的網頁檔案,我們也希望對其進行刪除。

批量重新命名檔案

package main

import (
    "fmt"
    "io/ioutil"
    "os"
    "strings"
)

// updateFileName 重新命名資料夾 dirname 中的檔案,將 oldStr 字串替換為 newStr
func updateFileName(dirPath, oldStr, newStr string) {
    fileInfos, err := ioutil.ReadDir(dirPath)
    if err != nil {
        return
    }

    for _, fileInfo := range fileInfos {
        filePath := dirPath + "\\" + fileInfo.Name()
        fmt.Println(filePath) // 列印檔案地址
        if fileInfo.IsDir() {
            // 如果當前檔案是資料夾,遞迴呼叫
            updateFileName(filePath, oldStr, newStr)
        } else {
            // 如果檔名包含 oldStr 欄位,則將替換為 newStr
            if strings.Contains(fileInfo.Name(), oldStr) {
                err := os.Rename(filePath, dirPath+"\\"+strings.Replace(f.Name(), oldStr, newStr, -1))
                if err != nil {
                    panic(err)
                }
            }
        }
    }
}

func main() {
    // 重新命名 test 資料夾下所有檔案,將 "www.xxx.com" 替換為 ""
    updateFileName("C:\\xxx\\test", "www.xxx.com", "")
}

批量刪除檔案

package main

import (
    "fmt"
    "io/ioutil"
    "os"
)

// deleteFile 刪除 dirPath 目錄下的指定檔案(fileNameSet)
func deleteFile(dirPath string, fileNameSet map[string]bool) {
    fileInfos, err := ioutil.ReadDir(dirPath)
    if err != nil {
        panic(err)
    }

    for _, fileInfo := range fileInfos {
        filePath := dirPath + "\\" + fileInfo.Name()
        fmt.Println(filePath) // 列印檔案地址
        if fileInfo.IsDir() {
            // 如果當前檔案是資料夾,遞迴呼叫
            deleteFile(filePath, fileNameSet)
        } else {
            // 刪除指定檔案
            if _, ok := fileNameSet[fileInfo.Name()]; ok {
                err := os.Remove(filePath)
                if err != nil {
                    panic(err)
                }
            }
        }
    }
}

func main() {
    // 刪除 C:\xxx\test 目錄下的所有 xxx.txt 檔案
    fileNames := []string{"xxx.txt"}
    fileNameSet := make(map[string]bool, len(fileNames))
    for _, fileName := range fileNames {
        fileNameSet[fileName] = true
    }
    deleteFile("C:\\xxx\\test", fileNameSet)
}