最近的一些日子,对Go语言比较感兴趣,然后就开始了学习。之所以对Go语言比较感兴趣,主要是发现工作的时候,常常需要我写一些脚本,而且需要跨平台,而且最好是开发简单、部署简单。然后,就发现Go语言其实是比较适合这个场景的。
今天在处理文件,想把照片上传到百度的“一刻相册”,但是呢,它每次限制上传一百,下载页限制到一百,如果这样的话,我直接本地多建几个目录,不就便于维护了嘛。
简单的想法就是把一个目录里的文件,按某个数量级,直接拷贝到一个新的目录里,然后编译成一个exe文件,配置到环境变量就好了。
这里简单的写了一下:
package main
// 1.根据文件数量,创建对应目录
// 2.遍历文件数组,拷贝文件到对应目录
import (
"flag"
"fmt"
"io/ioutil"
"os"
"strings"
)
func main() {
args := flag.Args()
var targetDir string
flag.StringVar(&targetDir, "dir", "", "文件路径")
flag.Parse()
if args == nil {
fmt.Println("请输入正确参数!格式为: -dir 文件路径")
return
}
fmt.Println("启动照片梳理脚本:")
fmt.Println(targetDir)
files, err := ioutil.ReadDir(targetDir)
if err != nil {
fmt.Printf("err: %v\n", err)
return
}
fmt.Println("当前目录下文件数量:", len(files))
fmt.Println("------------------------------------")
if len(files) < 80 {
fmt.Println("文件数量小于80,无需打包")
} else {
fmt.Println("检测到文件数量大于80,开始进行归档")
fmt.Println("创建目录,收纳照片到对应文件,每个目录保存80张图片")
dir_cnt := len(files)/80 + 1
for j := 0; j < dir_cnt; j++ {
pathName := targetDir + `\` + fmt.Sprintf("photo_%d", j)
fmt.Printf("创建目录:%s", pathName)
err = os.Mkdir(pathName, os.ModeDir)
if err != nil {
fmt.Println(err)
return
}
fmt.Println("拷贝文件:")
start := j * 80
end := start + 80
if end > len(files) {
end = len(files)
}
temps := files[start:end]
for _, j := range temps {
fname := j.Name()
if strings.HasSuffix(fname, "exe") {
} else if strings.HasSuffix(fname, "JPG") || strings.HasSuffix(fname, "MP4") || strings.HasSuffix(fname, "png") || strings.HasSuffix(fname, "jpg") {
fmt.Println(fname)
os.Rename(targetDir+`\`+fname, pathName+`\`+fname)
} else {
fmt.Println("异常格式,跳过!")
}
}
}
}
fmt.Println("处理完成!")
}
编译处理后的Exe文件:
https://www.123pan.com/s/UlhZVv-RVSsH.html提取码:67YI
使用:
imgs.exe -dir D:\photo\202301\ # 照片路径
一些想法:
- 写的脚本,不能坑人,刚开始写,忘记检测文件结尾了,嗯,万一弄错了,可能带来一些毁灭。
- 异常处理,很多时候必须考虑,比如参数的检测,目录的检测,文件类型的检测等等。
- 想更快的学习一门语言,还是需要一些练习,实际应用中,才能发现不足,提升能力。
网友评论