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

[文本处理] 【已解决】批处理如何定时查询字符串?

文本文件如附件所示:
需要建立的批处理脚本有如下几点说明:
用find /c "_12  RES AVAILABLE" sures.txt查找sures.txt中agent资源总数
用find /c "_12     RES IN USE" sures.txt查找sures.txt中agent资源使用量
将“日期 时间 机器名    Agent资源使用量/Agent资源总量”以字符串定时输出到agent.txt中,agent.txt大约每5分钟增加一行(因为sures.txt是每5分钟生成一个的)。

求大师帮忙处理下,小弟感激不尽啊
1

评分人数

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

回复 15# fish509008


    菜鸟待飞翔

TOP

回复 33# 再世情緣

加个/r 解决了无法查找telephony的问题

TOP

回复 33# 再世情緣
另外再请教你点问题,能不能做到监控窗口刷新时,只增加显示最新一条数据,原有数据还在窗口内,我发现如果生成的统计数据很多的话,每次刷新都是从头到尾的刷新,窗口里的数据滚动好久才能看到最后一条,然后还没等看明白呢,又重新刷一遍....感觉很不妥的样子

TOP

回复 33# 再世情緣

我又上传了一遍sures.txt
telephony要搜索的字符串是“ LINE.*_8  RES IN USE”和“ LINE.*_8  RES AVAILABLE”
*代表的是000-119之类的数字。前面的空格是为了区分非INLINE的

TOP

回复 32# fish509008


    我晕!!!你那附件里根本没有telephony的信息!!!
出错估计是你查找字符串里包含通配符*的问题,你试下把*去掉,换成具体的字符串

TOP

本帖最后由 fish509008 于 2013-12-9 22:23 编辑

回复 30# 再世情緣


不好意思啊,好像还是有点问题,配置文件中一共5个资源和搜索条件,但是telephony的统计错误,使用量和可用量都是0,有空帮我分析下。
sures.txt就用之前附件里提供的就行。
count.bat代码如下:
  1. @echo on &color 0a &setlocal enabledelayedexpansion
  2. pushd "%cd%"
  3. :main
  4. rem sures sures >sures.txt
  5. for /f "tokens=1,2,3 delims==" %%a in (config.txt) do (set /a "i=j=0"
  6.   if not exist "%computername%_%%a.txt" (echo.data   time     computername    %%a^<Inuse^>^/^<Available^>)>"%computername%_%%a.txt"
  7.   for /f "delims=" %%1 in ('findstr /i /c:"%%b" "sures.txt" 2^>nul') do (set /a i+=1)
  8.   for /f "delims=" %%1 in ('findstr /i /c:"%%c" "sures.txt" 2^>nul') do (set /a j+=1)
  9.   (echo.!date!   !time!   %computername%   !i!^/!j!)>>"%computername%_%%a.txt")
  10. echo %%d
  11. ping localhost -n 30 >nul
  12. cls &goto :main
复制代码

TOP

回复 30# 再世情緣

嗯,接收的建议。我是想不要对bat源码进行更改就可以设置循环时间的。date和time的是我自己觉得这两个占的位数挺长的 ,想把它们给尽量缩短点。
周末运行了两天,循环计数时间为10秒,刚才统计了下,5个资源统计文件一共才4.3M,比我想想的要小很多很多。

TOP

回复 29# fish509008


    关于你的第一个批处理count.bat,“tokens=1,2,3,4 delims==”,没必要 tokens=1,2,3,4 ,直接在最后把%t% 换成数字 10 就行了,
echo.%date:~0,10%   %time:~0,8%   %computername%   ,把.%date:~0,10%   %time:~0,8% 里面的%换成! (不然,你会看到在一次大循环里,时间都是一样的。。。)
资源监控也是,%t% 直接换成数字10,没必要设变量

TOP

回复 28# 再世情緣
经过几天学习和你的教导,我更改的最终版本是这样的。
一共分三部分: 如代码执行效率有不完善的地方,请多多赐教。
第一部分,文件生成!(count.bat)
  1. @echo off &color 0a &setlocal enabledelayedexpansion
  2. pushd "%cd%"
  3. :main
  4. sures sures >sures.txt
  5. for /f "tokens=1,2,3,4 delims==" %%a in (config.txt) do (
  6.   set /a "i=0","j=0"
  7.   set "name=%%a" &set "tk1=%%b" &set "tk2=%%c" &set "t=%%d"
  8.   if not exist "%computername%_!name!.txt" (echo.data   time     computername    !name!^<Inuse^>^/^<Available^>)>"%computername%_!name!.txt"
  9.   for /f "delims=" %%1 in ('findstr /i /c:"!tk1!" "sures.txt" ^>nul 2^>nul') do (set /a "i+=1")
  10.   for /f "delims=" %%1 in ('findstr /i /c:"!tk2!" "sures.txt" ^>nul 2^>nul') do (set /a "j+=1")
  11.   (echo.%date:~0,10%   %time:~0,8%   %computername%   !i!^/!j!)>>"%computername%_!name!.txt"
  12. )
  13. ping localhost -n %t% >nul 2>nul
  14. cls &goto :main
复制代码
第二部分:参数配置(config.txt)
agent=_12     RES IN USE=_12  RES AVAILABLE
telephony= LINE.*_8     RES IN USE= LINE.*_8  RES AVAILABLE
ntdll=_15     RES IN USE=_15  RES AVAILABLE
database=_4     RES IN USE=_4  RES AVAILABLE
soap=_50     RES IN USE=_50  RES AVAILABLE=10

第三部分:资源监控(agent.bat或者其它例如soap.bat,代码都一样)
  1. @echo off &color 0a
  2. title %~n0
  3. set /a "t=10"
  4. :ds
  5. type "%computername%_%~n0.txt"
  6. ping localhost -n %t% >nul 2>nul
  7. cls &goto :ds
复制代码

TOP

回复 27# fish509008


    没事,互相学习,这论坛里还是有不少好的教程的

TOP

回复 26# 再世情緣

我试了好久都不行#83。受你的启发,我不打算一次性开那么多监视窗口了。打算先直接生成各类资源文件,然后要监控哪个就直接运行生成的BAT文件即可,因为有些资源可能都不使用(这是我后来发现的)。
这次真是非常感谢你的帮助,我现在发现好多复杂的事情都可以用批处理来解决,最近也一直在补习这门功课。以后有疑问的地方可能还会向你求教,希望没打扰到你

TOP

回复 25# fish509008


    ::和rem 是一样的啊,我在我这测试是OK的啊,网络有点问题,图片无法上传。。。
不然就给你看截图了

TOP

回复 24# 再世情緣

之前也都是注释掉的啊,“::”和rem作用不是相同的么?另外sures.txt是我从服务器上导下来的,测试时我也是一直在自己笔记本上测试的。

TOP

回复  再世情緣

经过测试发现每个资源都始终只有一条,几个监视窗口倒是定时刷新了,但是写文件的循环不 ...
fish509008 发表于 2013-12-7 10:59


不好意思,因为之前测试的时候,我这里没有sures来生成sures.txt,只有用你附件带的sures.txt测试,所以。。。我把第十行::sures sures >sures.txt给注释掉了
现在代码已经改过了,不好意思哈

TOP

返回列表