[批处理]全盘搜索批量文件
2015-06-17 18:25
351 查看
引子
前两天,应一学长的请求去他宿舍给他看看毕业设计的问题结果去了才发现他从网上下载的CRM系统连编译都编译不过,更别谈运行问题了
看了下主要是这个系统用到了很多开源第三方控件库,而下载的时候都没有,需要自己去找
他的电脑里有一部分DLL,还缺少一部分,关键是他差的很多,一共缺少将近20个DLL
而在他电脑里的其中一部分DLL还找不到在哪,找了很久都没找到,所以我说我给你写个从全盘去找吧,
然后着手去做,发现问题重重,最终也没做成,弄得很没面子,回到宿舍赶快去研究了下重写了个完整的,现在放出来
简述
本批处理的特色就是可以在全盘下同时搜索一组文件名全盘搜索Windows本身也自带了(Win+F就是全盘搜索),但是只能搜索一个文件,不能同时搜索多个文件
所以才有个这个批处理的存在性
使用方法
先选择搜索模式,不同的搜索模式结果显示的不同,但结果完全一样模式1适用于1-3个文件
模式2适用于3个以上文件
搜索模式1:
@echo off&title 全盘搜索批量文件 小小沧海2012-3-6 setlocal EnableDelayedExpansion rem 过滤器,要搜索的一组文件,每一个文件用/符号隔开,例:Rec*.rar/HD *.rar set filter= rem 子过滤器,用于在每个分区下搜索文件的临时过滤器 set subf= set volume= rem 模式1使用的是在每一分区内把要搜索的文件全部显示在一块,没有顺序 rem 模式2使用的是在每一分区内分别显示出搜索的每一个文件 :choose echo ********全盘搜索批量文件******* echo ┏━━━━━━━━━━━━━━┓ echo ┃模式[1]:适用于搜索少量文件 ┃ echo ┃模式[2]:适用于搜索大量文件 ┃ echo ┗━━━━━━━━━━━━━━┛ echo 请选择搜索模式: set choose=n&set /p choose= if not %choose%==1 (if not %choose%==2 cls&goto choose) :filter rem 如果过滤器没有被事先定义则提示由用户手动输入 if "%filter%"=="" ( echo ┏━━━━━━━━━━━━━━━━━━━━━━━┓ echo ┃每个文件之间用/符号分隔开,例如a*b.txt/d?e.* ┃ echo ┃支持通配符?和*,不要包含其他特殊符号 ┃ echo ┗━━━━━━━━━━━━━━━━━━━━━━━┛ echo 请输入要搜索的批量文件: set filter=n&set /p filter= if "!filter!"=="n" (set filter=& cls & goto :filter) set filter=!filter:"=! ) rem 如果使用模式1则需要将过滤器修正为模式1支持的形式 rem 模式1使用dir命令自带的查找批量文件功能,形式为每个文件加双引号并用空格隔开,例"a*.*" "e?f.doc" if %choose%==1 ( set filter="!filter:"=!" set filter=!filter:/=" "! ) for /f "tokens=3" %%i in ('echo list volume ^| diskpart ^| findstr "磁盘分区"') do ( set volume=%%i if %choose%==1 ( echo.&echo ┃ echo ┃正在查找^<!volume!^>盘下的^<!filter!^>文件... echo ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━ cd /d "!volume!:\" dir !filter! /s /b /a ) else if %choose%==2 ( set subf=!filter! if not "!subf!"=="" (call :mode2 "!filter!") else echo -^>开始查找下一分区 ) ) echo.&echo. echo ┏━━━━━━━━━┓ echo ┃搜索完成!! ┃ echo ┗━━━━━━━━━┛ rem 在set filter=后面和&符号之间不能有空格,无空格是把filter变量删除,有空格是赋予一个空格 echo 按任意键返回 pause>nul & set filter=& cls & goto choose :mode2 rem %0为函数名称自身:mode2,%1为传过来的值,%~1为删除变量中的双引号" set subf=%~1 rem 在此子搜索函数中把过滤器按照/符号分割开,并取得分割后的第一个的值 rem 再把分割后的剩下的值重赋予过滤器,并调用自身,直到过滤器为空为止,返回 for /f "tokens=1,* delims=/" %%j in ("%subf%") do ( echo.&echo ┃ echo ┃正在查找^<!volume!^>盘下的^<%%j^>文件... echo ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━ dir "!volume!:\""%%j" /s /b /a set subf=%%k ) if not "!subf!"=="" (call %0 "!subf!") goto :eof
View Code
——原文发表于2012-3-11 08:57
相关文章推荐
- 备份和恢复vs2013和vs2015帮助查看器中的书签
- 网络通信中--大小端问题
- 学习c++建议
- CentOS下nginx+mysql+php环境安装,小结
- [Machine Learning][inrial lecture] and Category Representation
- 几个常用的gdb命令
- STM8S003F使用IO口模拟串口(二)接收数据
- 关于SQL语句查询区分大小写
- 后台执行命令的工具screen
- python greenlet背景介绍与实现机制
- PHP底层工作原理
- Volley学习笔记
- Linux包管理命令与Ubuntu下安装nginx的方法
- Linux下如何查看高CPU占用率线程 LINUX CPU利用率计算
- C++ VC实现对话框窗口任意分割
- U盘启动安装linux系统
- Android Tab实现
- XMPP协议的原理介绍
- 《浪潮之巅》阅读笔记之二
- 184使用 Core Image 框架处理照片