Go语言-批量删除文件的命令行程序delete_tool.exe

Go语言-批量删除文件的命令行程序delete_tool.exe

  • 工程目录
  • main.go
  • 删除指定目录下的文件夹DelDirs.go
  • 删除指定目录下特定后缀的文件DeleteFileBySuffix.go
  • 运行效果

前言:自写自用的一个小工具。使用golang写的一个可以根据输入目录删除批量文件的命令行应用。

主要功能:

  1. 删除指定目录下的文件夹
  2. 删除指定目录下特定后缀的文件

下面就开始贴代码了,完整代码,复制可用。

工程目录

Go语言-批量删除文件的命令行程序delete_tool.exe_第1张图片

main.go

package main

import (
	"demo2/deleteJars"
	"fmt"
)

var (
	option int
)

func main() {
     
	for {
     
		fmt.Println("====批处理程序====")
		fmt.Println("1.删除指定目录下的文件夹")
		fmt.Println("2.删除指定目录下特定后缀的文件")
		fmt.Printf("请输入操作序号: ")
		fmt.Scanln(&option)
		if 1 == option {
     
			delete.DelDirs()
		} else if 2 == option {
     
			delete.DelFileBySuffix()
		} else {
     
			fmt.Println("此功能正在开发中...")
		}
		fmt.Println(" ")

	}

}

删除指定目录下的文件夹DelDirs.go

package delete

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

//计数

//1.删除指定目录下的文件夹
func DelDirs() {
     
	var (
		delDir string
		dir    string
		flag   bool
	)
	fmt.Printf("输入根目录,如(D:\\test): ")
	fmt.Scanln(&dir)
	fmt.Printf("输入要删除的文件名: ")
	fmt.Scanln(&delDir) //Scanln 扫描来自标准输入的文本,将空格分隔的值依次存放到后续的参数内,直到碰到换行。
	// fmt.Scanf("%s %s", &firstName, &lastName)    //Scanf与其类似,除了 Scanf 的第一个参数用作格式字符串,用来决定如何读取。
	fmt.Println("要在目录", dir, "下删除", delDir, "目录?(true/false)")
	fmt.Scanln(&flag)

	if flag {
     
		fmt.Println("开始遍历并删除目录...")
		count = 0
		findAndDelDirs(dir, delDir)
		fmt.Printf("结束根据后缀删除文件,共删除[%d]个文件", count)
		fmt.Println("结束遍历并删除目录")
	}

}

func findAndDelDirs(dir string, delDir string) {
     
	rd, _ := ioutil.ReadDir(dir)
	for _, fi := range rd {
     
		if fi.IsDir() && fi.Name() == delDir {
     
			toDelDir := dir + string(filepath.Separator) + fi.Name()
			fmt.Printf("删除目录[%s]\n", toDelDir)
			os.RemoveAll(toDelDir)
		}
		if fi.IsDir() {
     
			findAndDelDirs(dir+string(filepath.Separator)+fi.Name(), delDir)
		}
	}

}

删除指定目录下特定后缀的文件DeleteFileBySuffix.go

package delete

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

//计数
var count int

//2.删除指定目录下特定后缀的文件
func DelFileBySuffix() {
     

	var (
		dir  string
		flag bool
	)
	fmt.Printf("输入根目录如(D:\\test): ")
	fmt.Scanln(&dir)
	fmt.Printf("输入要删除的文件后缀: ")
	var suffix string
	fmt.Scanln(&suffix)
	fmt.Printf("要在[%s]下删除后缀[%s]的所有文件?(true/false)\n", dir, suffix)
	fmt.Scanln(&flag)

	if flag {
     
		fmt.Println("开始根据后缀删除文件")
		count = 0
		WalkDir(dir, suffix)
		fmt.Printf("结束根据后缀删除文件,共删除[%d]个文件", count)
	}
}

/* 获取指定路径下以及所有子目录下的所有文件,可匹配后缀过滤(suffix为空则不过滤)*/
func WalkDir(dir, suffix string) {
     

	rd, _ := ioutil.ReadDir(dir)
	for _, fi := range rd {
     
		if fi.IsDir() {
     
			WalkDir(dir+string(filepath.Separator)+fi.Name(), suffix)
		} else {
     
			if strings.HasSuffix(fi.Name(), suffix) {
     
				toDelFile := dir + string(filepath.Separator) + fi.Name()
				fmt.Printf("删除文件[%s]\n", toDelFile)
				os.Remove(toDelFile)
				count++
			}
		}
	}

}

运行效果

====批处理程序====
1.删除指定目录下的文件夹
2.删除指定目录下特定后缀的文件
请输入操作序号: 2
输入根目录如(D:\test): D:\test\delBySuffix
输入要删除的文件后缀: .bmp
要在[D:\test\delBySuffix]下删除后缀[.bmp]的所有文件?(true/false)
true
开始根据后缀删除文件
删除文件[D:\test\delBySuffix\a.bmp]
删除文件[D:\test\delBySuffix\c\a.bmp]
结束根据后缀删除文件,共删除[2]个文件

====批处理程序====
1.删除指定目录下的文件夹
2.删除指定目录下特定后缀的文件
请输入操作序号:

源码和exe下载

你可能感兴趣的:(golang,go)