Board logo

标题: [其他] [已解决]如何延时调用外部批处理文件,并比较日志? [打印本页]

作者: zfen12x    时间: 2012-3-19 16:30     标题: [已解决]如何延时调用外部批处理文件,并比较日志?

本帖最后由 zfen12x 于 2012-3-20 14:31 编辑

求助,想写一个批处理文件,需要如下功能:
1.该批处理文件会调用另一个批处理文件,并获取被调用文件的log。
2.每隔一定时间(例如五分钟)比较两次log文件的大小是否有变化。如没有变化,kill掉被调用的批处理文件,并重新调用。

现在有如下几个问题:
1,延迟如何做?也就是linux下的sleep;在批处理下应该如何做?
2,bash下的kill在dos环境下如何处理?
3,第三个问题有点脸红了。。。比较两个log文件如何比较。。。

提前表示感谢!

由于小弟确实是新人,今天上午才接触批处理和dos环境,并且,项目要求较急。无奈之下做了伸手党。还望各位见谅!
作者: dnfreeuser    时间: 2012-3-19 16:39

我写的第三方延时程序,运行后延时1秒
http://www.bathome.net/attachmen ... ms5ZjRHb1RUVmtsOC9j
作者: zfen12x    时间: 2012-3-19 16:50

谢谢楼上,如此看来批处理没有提供现成的延时app呀。

还有一个问题,批处理的循环是如何做的?
例如C语言中的while或者for。如果我利用楼上的那个binary,那么我应该写一个600次循环才可以。
但是批处理中的for。。好像和perl中的foreach很类似。但是和C中的for又不一样。。。谢谢了!
作者: CrLf    时间: 2012-3-19 16:54

本帖最后由 CrLf 于 2012-3-19 16:55 编辑

任何命令都可以是延时命令...
  1. ping /t 300 127.1
  2. rem 延时 300 秒,ping 是比较常用的延时方案,相对低耗而准确,但不适合长时间延时
  3. ::也可以利用外部命令自带的延时功能,长时间延时的情况下较为准确
  4. wmic os get name /every:60 /repeat:5 >nul
  5. rem 延时 60 秒,循环 5 次
  6. typeperf "\objects\events" -sc 300 >nul
  7. rem 延时 300 秒
复制代码
  1. @echo off>>new.log
  2. %1 start /b "test" test.bat
  3. (
  4.    copy /y new.log old.log >nul
  5.    fc 1.log 2.log&&taskkill /f /t /fi "windowtitle eq test"&&start /b "test" test.bat
  6.    wmic os get name /every:60 /repeat:5
  7.    %0 :
  8. )>nul
  9. rem 如果是以管理员身份运行,taskkill 那句的条件应该写成 "windowtitle eq 管理员: test"
复制代码

作者: zfen12x    时间: 2012-3-19 16:57

有用 谢谢ls!
作者: find    时间: 2012-3-19 18:24

回复 3# zfen12x


http://www.bathome.net/viewthread.php?tid=3693#pid23312
作者: zfen12x    时间: 2012-3-20 09:00

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

谢谢大家。




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2