找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 23843|回复: 9

[文本处理] findstr能读取指定文件中包含指定字符串的最后一行内容吗?

[复制链接]
发表于 2018-12-11 12:29:57 | 显示全部楼层 |阅读模式
有一个LOG文件需要读取和判断,需要的字符串一般出现在LOG文件的最后一行,开始的时候用这个代码:
  1. for /f "usebackq delims=" %%i in ("C:\Program Files (x86)\zpp\adb.log") do (echo %%i > lastline.txt)
复制代码
,发现在当程序运行的时候并不能读取,只能先复制出来才可以。会出现(系统找不到文件 C:\Program Files (x86)\zpp\adb.log。)而且效率不并高,把LOG文件逐行内容读取到 lastline.txt里,随着LOG的变大,时间会越来越长。后面发现findstr 可以直接查找指定的字符串,再用代码:
  1. for /F "tokens=4 delims=[]" %%a in ('findstr /c:"sr = error_shell_ok, ir = error_insufficient_storage" "C:\Program Files (x86)\zpp\adb.log"') do (echo %%a)
复制代码
,可以很准确的读出来指定的字符串,但是有个问题就是它会把LOG文件里所有符合条件的字符串都读出来,但是程序要求是读取最新的资料,一般这个字符串都在LOG文件的最后一行里,请教一下有没有什么好办法可以做到~。用findstr这条命令的话。附上LOG文件。
 楼主| 发表于 2018-12-11 12:31:11 | 显示全部楼层
像上面的LOG文件,只取最后一行,也就是最新的内容里的6334赋值给一个变量,方便后续操作~
发表于 2018-12-11 13:21:58 | 显示全部楼层
  1. for /F "tokens=4 delims=[]" %%a in ('findstr /c:"sr = error_shell_ok, ir = error_insufficient_storage" "C:\Program Files (x86)\zpp\adb.log"') do (
  2.     set "str=%%a"
  3. )
  4. echo %str%
复制代码
这样可以吗?
 楼主| 发表于 2018-12-11 13:32:41 | 显示全部楼层
这样肯定是可以的,但是感觉效率不高,有没有能直接读取最后一行的操作~。。嘿嘿。。
 楼主| 发表于 2018-12-11 13:33:12 | 显示全部楼层
LOG文件有时会很大,几十M都有可能的~
发表于 2018-12-11 15:29:07 | 显示全部楼层
回复 5# psstudio


    用那个几十M的文件测试一下3楼代码,看看需要多少秒?
发表于 2018-12-11 15:42:40 | 显示全部楼层
本帖最后由 yhcfsr 于 2018-12-11 15:49 编辑

实测117万行数据(97M) 1秒内完成
  1. findstr /c:"sr = error_shell_ok, ir = error_insufficient_storage" adb.log.txt|gawk "END{print}"
复制代码
GAWK下载
发表于 2018-12-11 16:09:52 | 显示全部楼层
来个更快的

  1. Powershell "gc 'xxxx\xxx.log' -readcount 0 -tail 1"
复制代码
 楼主| 发表于 2018-12-12 15:21:45 | 显示全部楼层
膜拜楼上的大神。。。。。。
发表于 2018-12-12 16:22:07 | 显示全部楼层
回复 7# yhcfsr


    去掉findstr,直接用gawk做字符串匹配,效果如何呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-21 01:21 , Processed in 0.032940 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表