昨天看到有个小伙伴在微信后台留言,说想要做一个批处理文件,搜索软件运行产生的log日志,搜索其中的关键词,并将结果打印出来,这个真的是很有实用意义啊,一方面减小了我们的工作量,另一方面也是对我们学习成果的一个检测和实际应用。所以,今天发个有关BAT批处理的教程。
批处理程序的分析:
首先,确定指定的文件名称:
由于log日志多用日期命名,所以我们要设置一个变量,取得当前日期--set "Ymd=%date:~,4%%date:~5,2%%date:~8,2%"
解释:通过%date:~5,2%来组合得出当前日期,组合的效果为yyyymmdd,date命令得到的日期格式默认为yyyy-mm-dd(如果不是此格式可以通过pause命令来暂停命令行窗口看通过%date:~,20%得到的当前计算机日期格式),所以通过%date:~5,2%即可得到日期中的第五个字符开始的两个字符,例如今天为20181009,通过%date:~5,2%则可以得到10。(日期的字符串的下标是从0开始的)。但是如果你的电脑产生的日志为:2018-10-09这种格式,可自行添加前缀或者后缀。
搜索文件路径:
for %%a in (D) do (
if exist %%a: (
for /f "delims=" %%b in ('dir /a-d /s /b "%%a:%FileName%" 2^>nul') do (
echo 找到日志:%%b
其中FileName是我们指定的文件名称,参考上面解释。
第一个for循环里面的D盘,可以加上C D E等等盘,盘符之间空格隔开即可。
搜索指定关键词:
findstr /s /i "%KeyWord%" %%b>>需要保存的文件+位置.txt
好了,其中的关键词解释部分都已经给出,文章写的匆忙,大家见谅,下面看实际效果:
运行效果:
好了,直接上代码:
@echo off
::作用:找到指定log文件的指定关键词,保存到指定位置的TXT中!
::FileName的值改为你需要日志名称
::KeyWord需要搜索的关键字
::FindName搜索结果保存的路径
::第一个for循环里面的D盘,可以加上C D E等等盘,盘符之间空格隔开即可
::通过%date:~5,2%来组合得出当前日期,组合的效果为yyyymmdd,date命令得到的日期格式默认为yyyy-mm-dd
::(如果不是此格式可以通过pause命令来暂停命令行窗口看通过
::%date:~,20%得到的当前计算机日期格式),所以通过%date:~5,2%即可得到日期中的第五个字符开始的两个字符,
::例如今天为20181009,通过%date:~5,2%则可以得到00。(日期的字符串的下标是从0开始的)
::如果你的电脑产生的日志为:2018-10-09这种格式,可自行添加前缀或者后缀
set "Ymd=%date:~,4%%date:~5,2%%date:~8,2%"
set "FileName=*%Ymd%*.log"
set "KeyWord=fail"
set "FindName=D:%Ymd%_FindLog.txt"
echo 正在搜索,请稍候...
for %%a in (D) do (
if exist %%a: (
for /f "delims=" %%b in ('dir /a-d /s /b "%%a:%FileName%" 2^>nul') do (
echo 找到日志:%%b
findstr /s /i "%KeyWord%" %%b>>%FindName%
echo 已保存搜索“%KeyWord%”的信息至:%FindName%
)
)
)
pause
程序传到码云上了:
https://gitee.com/jahero/bat/
参考文章:
https://zhidao.baidu.com/question/567685734.html?qbl=relate_question_0&word=bat%CB%D1%CB%F7%B0%FC%BA%AC%C4%B3%B8%F6%D7%D6%B7%FB%C3%FB%B3%C6%B5%C4%CE%C4%BC%FE%BC%D0