如何使用批处理脚本过滤特定内容并提取日志中的日期时间
让我来帮你搞定这两个批处理脚本的问题:
问题1:如何使用批处理脚本从指定语句中过滤特定词汇?
根据你要实现的目标,常见的过滤方式有几种,给你举具体的例子:
提取包含特定词汇的行
用findstr命令就能快速筛选,比如要从input.txt里揪出所有包含"INFO"的行:
findstr "INFO" input.txt
如果要精确匹配整个单词(避免比如"INFORMATION"这种部分匹配),加上/X参数:
findstr /X "INFO" input.txt
移除语句中的特定词汇
要是想把某段文本里的特定词汇删掉,可以结合for循环和字符串替换。比如把test.txt每一行里的"ERROR"清空:
@echo off setlocal enabledelayedexpansion for /F "usebackq delims=" %%a in ("test.txt") do ( set "line=%%a" set "line=!line:ERROR=!" echo !line! ) endlocal
排除包含特定词汇的行
反过来,要去掉包含某词汇的行,用findstr的/V参数就行,比如排除所有带"WARN"的行:
findstr /V "WARN" input.txt
问题2:从指定日志行提取日期和时间
先看看你的目标日志行:
C:\a\controller2.log.2018-02-28:2018-02-28 20:20:59,092 # [XLProcessContextImpl.126591.end_of_day_revaluation] # INFO # C=UpdateDBStatisticProcessListener Update Statistics Query::DEC
你已经用到了for /F命令,只需要调整参数就能直接拿到日期和时间:
直接提取的方案
@echo off for /F "usebackq tokens=2,3 delims=: " %%a in ("abc.txt") do ( echo 提取到的日期时间:%%a %%b )
为啥这么写?
delims=::把冒号和空格设成分隔符,日志行就会被拆分成多个片段;tokens=2,3:取第2个(日期2018-02-28)和第3个(时间20:20:59,092)片段;- 把
%%a和%%b拼在一起,就是你要的完整日期时间啦。
把结果存到变量里
如果需要把提取到的日期时间保存下来后续使用,记得启用延迟变量扩展:
@echo off setlocal enabledelayedexpansion for /F "usebackq tokens=2,3 delims=: " %%a in ("abc.txt") do ( set "datetime=%%a %%b" echo 保存好的日期时间:!datetime! ) endlocal
内容的提问来源于stack exchange,提问作者podduturi
相关产品推荐
相关产品推荐

