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

Posted 阿拉的梦想

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go语言-批量删除文件的命令行程序delete_tool.exe相关的知识,希望对你有一定的参考价值。

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

主要功能:

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

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

工程目录

在这里插入图片描述

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下载

以上是关于Go语言-批量删除文件的命令行程序delete_tool.exe的主要内容,如果未能解决你的问题,请参考以下文章

Go语言命令行参数

[Cobra]Go语言的命令行编写工具的快速入门

Go语言---小白入门-命令行库Cobra的使用

CMD如何批量调用命令行程序

给go程序添加命令行参数

批量DOS删除指定文件命令