批量重命名/删除文件
平时下载文件或者视频的命名很多带有长长的网址前缀,比如一些编程的教学视频,如果对其进行重命名观感上舒服多了;还有一些的压缩包,解压之后,文件夹中包含广告的网页文件,我们也希望对其进行删除。
批量重命名文件
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)
}