[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]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

在线等着啊 有木有人啊?

TOP

本帖最后由 再世情緣 于 2013-12-5 09:38 编辑

试试这个:
  1. @echo off &color 0a &setlocal enabledelayedexpansion
  2. pushd "%cd%"
  3. :main
  4. set /a "i=j=0"
  5. if not exist sures.txt (msg %username% /time:5 "错误!!未找到 sures.txt 文件!!!" &call exit)
  6. if not exist "agent.txt" (echo.日期 时间 机器名 Agent资源使用量/Agent资源总量)>"Agent.txt"
  7. for /f "delims=" %%a in ('findstr /i /c:"_12     RES IN USE" "sures.txt" 2^>nul') do (set /a "i+=1")
  8. for /f "delims=" %%a in ('findstr /i /c:"_12  RES AVAILABLE" "sures.txt" 2^>nul') do (set /a "j+=1")
  9. (echo.!date! !time! %username% !i!^/!j!)>>"Agent.txt"
  10. type "Agent.txt"
  11. ping localhost -n 300 >nul
  12. cls &goto :main
复制代码
一下是我对你的题目的理解:
  你所说的日期 时间 机器名  应该是本地计算机上的日期 时间 用户名吧;
  如果是用户名,就是%username%,如果是计算机名,就是%computername%,这个看你需要,自己改对应代码;
  你说的大约5分钟 更新一次,所以,我这里更新周期是300秒(大约),根据你的需要,自己修改;
  另外,我又加了部分:运行批处理的时候,检测是否存在 sures.txt 文件,存在就继续,不存在就弹消息提示并退出,
  然后检测是否存在 Agent.txt ,存在的话,继续往里面加东西,不存在就按照格式
  日期        时间        机器名        Agent资源使用量/Agent资源总量
  创建Agent.txt文件 ;
  并且会在每次写入 Agent.txt 文件之后,在批处理窗口显示出来 Agent.txt 的内容。
这个批处理打开之后,不会自动关闭。
1

评分人数

TOP

回复 3# 再世情緣


    太感谢你了,我琢磨了半宿,也没弄好。

TOP

回复 3# 再世情緣


    附件的文件sures.txt其实也是用CMD命令生成的。本来我是想建个定时任务来定时生成sures.txt,然后再建个定时任务去处理sures.txt并最终生成Agent.txt的
但是看到你写的这些代码后,我不知道能否用一个定时任务同时来执行呢?
   盼望你的答复,谢谢了!

TOP

回复 5# fish509008


    应该可以的,把你的批处理添加到我的批处理的:main 标记前面,然后代码最后循环跳向标记改到你的批处理开始处,
如果添加任务计划的话。。。貌似你得添加好多个任务计划了。。。window默认任务计划一个任务最多一天一次的吧,

TOP

回复 6# 再世情緣

计划任务倒是不用建很多的。在计划任务里选择执行周期为每天,设定启动时间,打开任务高级属性,勾选重复任务,设定重复时间间隔(5分钟),以及持续时间(24小时),应该就可以了。

TOP

回复 6# 再世情緣

我把生成sures.txt的命令也直接放到循环体内了。结果出了点小问题,就是sures.txt文件一直记录下去,而不是最初想的会每隔300秒重新生成一个。
是否需要把原来的sures.txt给删除掉才能达到要求呢?
修改的代码如下:

@echo off &color 0a &setlocal enabledelayedexpansion
pushd "%cd%"
set /a "i=j=0"
:main
sures sures >sures.txt
if not exist sures.txt (msg %username% /time:5 "错误!!未找到 sures.txt 文件!!!" &call exit)
if not exist "agent.txt" (echo.日期        时间        机器名        Agent资源使用量/Agent资源总量)>"Agent.txt"
for /f "delims=" %%a in ('findstr /i /c:"_12     RES IN USE" "sures.txt" 2^>nul') do (set /a "i+=1")
for /f "delims=" %%a in ('findstr /i /c:"_12  RES AVAILABLE" "sures.txt" 2^>nul') do (set /a "j+=1")
(echo.!date!        !time!         %computername%        !i!^/!j!)>>"Agent.txt"
type "Agent.txt"
ping localhost -n 300 >nul
cls &goto :main

TOP

已经缺人删除掉就可以了。定时任务暂时也没问题
另外我又添加了其它几种资源的统计。但是测试时好像只有第一个agent资源统计能生效
是不是需要在批处理中另外开启窗口来执行这个动作?

下面是我修改的脚本。有空的话能帮我审查下吗?

1        @echo off &color 0a &setlocal enabledelayedexpansion
2        pushd "%cd%"
3        rem 设置变量
4        set /a "a=b=c=d=e=f=g=h=i=j=0"
5        set Tm=300
6        :main
7        rem 生成资源文件
8        sures sures >sures.txt
9        if not exist sures.txt (msg %username% /time:5 "错误!!未找到 sures.txt 文件!!!" &call exit)
10        rem 生成agent资源使用情况统计文件
11        if not exist "agent.txt" (echo.日期        时间        机器名        Agent使用数量/Agent空余数量)>"Agent.txt"
12        for /f "delims=" %%a in ('findstr /i /c:"_12     RES IN USE" "sures.txt" 2^>nul') do (set /a "a+=1")
13        for /f "delims=" %%a in ('findstr /i /c:"_12  RES AVAILABLE" "sures.txt" 2^>nul') do (set /a "b+=1")
14        (@echo.!date!        !time!         %computername%        !a!^/!b!)>>"Agent.txt"
15        type "Agent.txt"
16        ping localhost -n %TM% >nul
17        rem 生成电话资源使用情况统计文件
18        if not exist "Telephony.txt" (echo.日期        时间        机器名        电话使用数量/电话空余数量)>"Agent.txt"
19        for /f "delims=" %%a in ('findstr /i /c:"_8     RES IN USE" "sures.txt" 2^>nul') do (set /a "c+=1")
20        for /f "delims=" %%a in ('findstr /i /c:"_8  RES AVAILABLE" "sures.txt" 2^>nul') do (set /a "d+=1")
21        (@echo.!date!        !time!         %computername%        !c!^/!d!)>>"Telephony.txt"
22        type "Telephony.txt"
23        ping localhost -n %TM% >nul
24        rem 生成动态库使用情况统计文件
25        if not exist "Ntdll.txt" (echo.日期        时间        机器名        动态库使用数量/动态库空余数量)>"Ntdll.txt"
26        for /f "delims=" %%a in ('findstr /i /c:"_15     RES IN USE" "sures.txt" 2^>nul') do (set /a "e+=1")
27        for /f "delims=" %%a in ('findstr /i /c:"_15  RES AVAILABLE" "sures.txt" 2^>nul') do (set /a "f+=1")
28        (@echo.!date!        !time!         %computername%        !c!^/!d!)>>"Ntdll.txt"
29        type "Ntdll.txt"
30        ping localhost -n %TM% >nul
31        rem 生成数据库使用情况统计文件
32        if not exist "database.txt" (echo.日期        时间        机器名        数据库使用数量/数据库空余数量)>"database.txt"
33        for /f "delims=" %%a in ('findstr /i /c:"_4     RES IN USE" "sures.txt" 2^>nul') do (set /a "g+=1")
34        for /f "delims=" %%a in ('findstr /i /c:"_4  RES AVAILABLE" "sures.txt" 2^>nul') do (set /a "h+=1")
35        (@echo.!date!        !time!         %computername%        !c!^/!d!)>>"database.txt"
36        type "database.txt"
37        ping localhost -n %TM% >nul
38        rem 生成SOAP使用情况统计文件
39        if not exist "soap.txt" (echo.日期        时间        机器名        SOAP使用数量/SOAP空余数量)>"soap.txt"
40        for /f "delims=" %%a in ('findstr /i /c:"_50     RES IN USE" "sures.txt" 2^>nul') do (set /a "i+=1")
41        for /f "delims=" %%a in ('findstr /i /c:"_50  RES AVAILABLE" "sures.txt" 2^>nul') do (set /a "j+=1")
42        (@echo.!date!        !time!         %computername%        !c!^/!d!)>>"soap.txt"
43        type "soap.txt"
44        ping localhost -n %TM% >nul
45        del/Q sures.txt
46        cls &goto :main

TOP

回复 9# fish509008
  1. @echo off &color 0a &setlocal enabledelayedexpansion
  2. pushd "%cd%"
  3. rem 设置变量
  4. set Tm=300
  5. :main
  6. rem 初始化统计次数,每次循环都初始化,如果不需要,就放在 :main 标记前面
  7. set /a "a=b=c=d=e=f=g=h=i=j=0"
  8. rem 生成资源文件
  9. sures sures >sures.txt
  10. if not exist sures.txt (msg %username% /time:5 "错误!!未找到 sures.txt 文件!!!" &call exit)
  11. rem 生成agent资源使用情况统计文件
  12. if not exist "agent.txt" (echo.日期 时间 机器名 Agent使用数量/空余数量)>"Agent.txt"
  13. for /f "delims=" %%a in ('findstr /i /c:"_12     RES IN USE" "sures.txt" 2^>nul') do (set /a "a+=1")
  14. for /f "delims=" %%a in ('findstr /i /c:"_12  RES AVAILABLE" "sures.txt" 2^>nul') do (set /a "b+=1")
  15. (@echo.!date! !time! %computername% !a!^/!b!)>>"Agent.txt"
  16. rem 生成电话资源使用情况统计文件
  17. if not exist "Telephony.txt" (echo.日期 时间 机器名 电话使用数量/空余数量)>"Telephony.txt"
  18. for /f "delims=" %%a in ('findstr /i /c:"_8     RES IN USE" "sures.txt" 2^>nul') do (set /a "c+=1")
  19. for /f "delims=" %%a in ('findstr /i /c:"_8  RES AVAILABLE" "sures.txt" 2^>nul') do (set /a "d+=1")
  20. (@echo.!date! !time! %computername% !c!^/!d!)>>"Telephony.txt"
  21. rem 生成动态库使用情况统计文件
  22. if not exist "Ntdll.txt" (echo.日期 时间 机器名 动态库使用数量/空余数量)>"Ntdll.txt"
  23. for /f "delims=" %%a in ('findstr /i /c:"_15     RES IN USE" "sures.txt" 2^>nul') do (set /a "e+=1")
  24. for /f "delims=" %%a in ('findstr /i /c:"_15  RES AVAILABLE" "sures.txt" 2^>nul') do (set /a "f+=1")
  25. (@echo.!date! !time! %computername% !e!^/!f!)>>"Ntdll.txt"
  26. rem 生成数据库使用情况统计文件
  27. if not exist "database.txt" (echo.日期 时间 机器名 数据库使用数量/空余数量)>"Database.txt"
  28. for /f "delims=" %%a in ('findstr /i /c:"_4     RES IN USE" "sures.txt" 2^>nul') do (set /a "g+=1")
  29. for /f "delims=" %%a in ('findstr /i /c:"_4  RES AVAILABLE" "sures.txt" 2^>nul') do (set /a "h+=1")
  30. (@echo.!date! !time! %computername% !g!^/!h!)>>"Database.txt"
  31. rem 生成SOAP使用情况统计文件
  32. if not exist "SOAP.txt" (echo.日期 时间 机器名 SOAP使用数量/空余数量)>"SOAP.txt"
  33. for /f "delims=" %%a in ('findstr /i /c:"_50     RES IN USE" "sures.txt" 2^>nul') do (set /a "i+=1")
  34. for /f "delims=" %%a in ('findstr /i /c:"_50  RES AVAILABLE" "sures.txt" 2^>nul') do (set /a "j+=1")
  35. (@echo.!date! !time! %computername%! !i!^/!j!)>>"SOAP.txt"
  36. ping localhost -n %TM% >nul
  37. cls &goto :main
复制代码
哥们,以后论坛添加代码请用代码块包起来,便于复制,你这个。。。。我复制之后,删除前面的行数都花了好大一会儿#83
  不用杉树 sures.txt,代码中的 sures sures >sures.txt 每次循环都会重新写 sures.txt
  另外,你说的不会生成后面的文件。。。是你延时太长了。。。你每生成一个文件都延时5分钟。。。你这总共5个文件,循环一次都要25分钟了。。。

TOP

回复 10# 再世情緣


    嗯 昨天我已经自己找到原因了。谢谢啊

TOP

回复 10# 再世情緣


    #83....好熟悉的感觉。你也玩大话的吗?还是梦幻

TOP

回复 10# 再世情緣


    再请教你个问题!date!,!time!和%date%,%time%有什么区别?
   data取值有的是"星期* YYYY-MM-DD",有的是"YYYY-MM-DD 星期* " 怎么去星期给去掉啊?

TOP

!date!,!time!和%date%,%time%有什么区别?

看教程:
http://www.bathome.net/thread-2899-1-1.html

TOP

回复 14# DAIC


    哎,菜鸟只能是想到什么问什么了。谢谢你补充的资料,已收藏,得慢慢研究

TOP

返回列表