bat实现命令行全盘遍历搜索文件

背景:当想要查找一个文件时,记得放在某个盘里。手动去遍历时感觉好心累,找了半天还是没有找着(虽然win有自带的搜索框,但是看着进度条的速度,我便果断的点了取消)。基于这个情况,所以写了脚本满足自身查找文件的需求。

一、遍历搜索文件或目录的命令

先来了解一下win自带的遍历搜索命令,这两个命令都可以进行模糊匹配。例如:sea*.bat

  • dir /S search.bat   遍历当前目录查找search.bat 文件
  • forfiles /S /M search.bat   遍历当前目录查找search.bat文件

以上两个命令各有优势,都是指定盘符查找,视情况使用。

二、全盘遍历查找脚本

这里全盘遍历便是根据上述命令进行循环查找

@echo off& setlocal enabledelayedexpansion
rem +++++++++++++++++++++++++++++++++++++++++++
rem   search.bat
rem          By zhzw @2018/7/4
rem
rem            Version: 1.0
rem +++++++++++++++++++++++++++++++++++++++++++
set stime=%time:~0,2%%time:~3,2%%time:~6,2%
if "%stime:~0,1%"==" " set "stime=0%stime:~1%"

if "%1" equ "" (
    echo 命令语法不正确。使用/?查看帮助
    goto exit
)
if "%1" equ "/?" (
    echo 全盘搜索文件/文件夹或者遍历目录。
	echo.
    echo SEARCH ^[file^]^[folder^]^[path^] ^[/V^]
	echo.
	echo   ^[file^]^[folder^]^[path^]
	echo 	指定要列出的文件、文件夹或目录列表。
	echo.
	echo   ^[/V^]
	echo 	查找相关字符串
    goto exit
)
if /i "%1" equ "/v" (
	echo 模糊查找
    set pwd=%cd%
	echo  start searching .....
	echo.

	for %%i in (C: D: E: F: G: H: I: J: K:) do (
		if exist %%i (
			echo ■■■■ Searching for the %%i disk
			rem if exist %%i
ul
			rem cd /d %%i & dir /S/b "%1" 2>nul
			cd /d %%i & dir /S/b |findstr "%2$" & echo.
		)
	)
	cd /d !pwd!
	echo. &echo. &echo.
) else (
	set pwd=%cd%
	echo  start searching .....
	echo.
        
        @rem fsutil fsinfo drives 获得各驱动器盘符
	for %%i in (C: D: E: F: G: H: I: J: K:) do (
		if exist %%i (
			echo ■■■■ Searching for the %%i disk
			rem if exist %%i
ul
			rem cd /d %%i & dir /S/b "%1" 2>nul
			cd /d %%i & dir /S/b "%1" & echo.
		)
	)
	cd /d !pwd!
	echo. &echo. &echo.
)

set etime=%time:~0,2%%time:~3,2%%time:~6,2%
if "%etime:~0,1%"==" " set "etime=0%etime:~1%"
echo 开始时间:%stime%
echo 结束时间:%etime%
:exit

三、配置环境变量命令行使用

我的电脑 -->右键 --> 属性 --> 环境变量 --> 系统变量 --> Path --> 输入search.bat 文件所在路径

这样就能在命令行快速的使用命令查找文件或目录所在路径了

最后附上效果图:

四、扩展 forfiles 的使用

删除3天前的所有文件
forfiles /P G:Test /D -3  /C "cmd /c del @file"

删除今天或今天之后的Test目录下的所有数据
forfiles /D +%date:~0,10% /P G:Test /C "cmd /c rd /S/Q G:Test"


删除今天之后的文件和目录
forfiles /D +%date:~0,10% /P G:Test /C "cmd /c if @isdir==true (rd /S/Q @path) else (del @file)"
原文地址:https://www.cnblogs.com/zeo-to-one/p/9302701.html