[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]批处理命令for循环如何从后往前读一个文件?

for循环中的skip参数可以忽略从前往后数的行数(当for读取文件的时候),那么我的问题是,如果我想从后往前读呢?例如从后往前读一百行。
因为我想没隔一段时间(例如五分钟)读取最新的log信息,也就是最后几行是否出现某关键字,当关键字存在,我就goto,跳出循环。如果从前往后一直读,也是可以实现的,但是当log文件很大时,效率就成问题了。

谢谢大家。
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

回复 2# CrLf


    非常感谢,该段代码确实实现了倒序输出,但是并不能实现截取,想请教在此基础上,如何实现截取前100行或者前N行的文本信息。

另外还有一个小小的请求,我的目的是提高效率,因为我的log文件非常大,可能要几万行十几万行的样子,如果每行读取的话会降低效率,所以实现的代码不要全读文件,如果是以那种方式那我就全白忙活了呵呵。

在此表示感谢!

TOP

本帖最后由 zfen12x 于 2012-3-21 13:51 编辑

回复 2# CrLf
  1. @echo off
  2. start "test" %1 %2 %3
  3. type nul > old.log
  4. type nul > new.log
  5. :loop
  6. fc new.log old.log&&taskkill /f /t /fi "windowtitle eq XYZ*"&&start "test" %1 %2 %3
  7. ::fc new.log old.log&&taskkill /f /t /fi "windowtitle eq Administrator: test"&&start "test" %1 %2 %3
  8. copy /y new.log old.log >nul
  9. wmic os get name /every:60 /repeat:6 >nul
  10. for /f "delims=: tokens=3" %%i in ('sort /+4096 new.log') do if /i "%%i" == " Executed" goto exit
  11. goto loop
  12. :exit
  13. taskkill /f /t /fi "windowtitle eq Administrator: test"
复制代码
请参考代码,我想在for循环里面做一些改动,目前是从上往下读取,并截取关键字。最理想的想法是从下往上,倒序读一百行,检查里面是否有我想要的关键字。

TOP

本帖最后由 zfen12x 于 2012-3-21 15:00 编辑

回复 6# CrLf


    谢谢斑竹的回复,谢谢你。

TOP

返回列表