标题: [文本处理] 【已解决】批处理如何定时查询字符串? [打印本页]
作者: fish509008 时间: 2013-12-4 22:12 标题: 【已解决】批处理如何定时查询字符串?
文本文件如附件所示:
需要建立的批处理脚本有如下几点说明:
用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分钟生成一个的)。
求大师帮忙处理下,小弟感激不尽啊
作者: fish509008 时间: 2013-12-4 22:48
在线等着啊 有木有人啊?
作者: 再世情緣 时间: 2013-12-5 07:43
本帖最后由 再世情緣 于 2013-12-5 09:38 编辑
试试这个:- @echo off &color 0a &setlocal enabledelayedexpansion
- pushd "%cd%"
- :main
- set /a "i=j=0"
- 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! %username% !i!^/!j!)>>"Agent.txt"
- type "Agent.txt"
- ping localhost -n 300 >nul
- cls &goto :main
复制代码
一下是我对你的题目的理解:
你所说的日期 时间 机器名 应该是本地计算机上的日期 时间 用户名吧;
如果是用户名,就是%username%,如果是计算机名,就是%computername%,这个看你需要,自己改对应代码;
你说的大约5分钟 更新一次,所以,我这里更新周期是300秒(大约),根据你的需要,自己修改;
另外,我又加了部分:运行批处理的时候,检测是否存在 sures.txt 文件,存在就继续,不存在就弹消息提示并退出,
然后检测是否存在 Agent.txt ,存在的话,继续往里面加东西,不存在就按照格式
日期 时间 机器名 Agent资源使用量/Agent资源总量
创建Agent.txt文件 ;
并且会在每次写入 Agent.txt 文件之后,在批处理窗口显示出来 Agent.txt 的内容。
这个批处理打开之后,不会自动关闭。
作者: fish509008 时间: 2013-12-5 08:14
回复 3# 再世情緣
太感谢你了,我琢磨了半宿,也没弄好。
作者: fish509008 时间: 2013-12-5 08:22
回复 3# 再世情緣
附件的文件sures.txt其实也是用CMD命令生成的。本来我是想建个定时任务来定时生成sures.txt,然后再建个定时任务去处理sures.txt并最终生成Agent.txt的
但是看到你写的这些代码后,我不知道能否用一个定时任务同时来执行呢?
盼望你的答复,谢谢了!
作者: 再世情緣 时间: 2013-12-5 09:42
回复 5# fish509008
应该可以的,把你的批处理添加到我的批处理的:main 标记前面,然后代码最后循环跳向标记改到你的批处理开始处,
如果添加任务计划的话。。。貌似你得添加好多个任务计划了。。。window默认任务计划一个任务最多一天一次的吧,
作者: fish509008 时间: 2013-12-5 10:28
回复 6# 再世情緣
计划任务倒是不用建很多的。在计划任务里选择执行周期为每天,设定启动时间,打开任务高级属性,勾选重复任务,设定重复时间间隔(5分钟),以及持续时间(24小时),应该就可以了。
作者: fish509008 时间: 2013-12-5 10:47
回复 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
作者: fish509008 时间: 2013-12-5 12:03
已经缺人删除掉就可以了。定时任务暂时也没问题
另外我又添加了其它几种资源的统计。但是测试时好像只有第一个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
作者: 再世情緣 时间: 2013-12-6 07:32
回复 9# fish509008 - @echo off &color 0a &setlocal enabledelayedexpansion
- pushd "%cd%"
- rem 设置变量
- set Tm=300
- :main
- rem 初始化统计次数,每次循环都初始化,如果不需要,就放在 :main 标记前面
- set /a "a=b=c=d=e=f=g=h=i=j=0"
- rem 生成资源文件
- sures sures >sures.txt
- if not exist sures.txt (msg %username% /time:5 "错误!!未找到 sures.txt 文件!!!" &call exit)
- rem 生成agent资源使用情况统计文件
- if not exist "agent.txt" (echo.日期 时间 机器名 Agent使用数量/空余数量)>"Agent.txt"
- for /f "delims=" %%a in ('findstr /i /c:"_12 RES IN USE" "sures.txt" 2^>nul') do (set /a "a+=1")
- for /f "delims=" %%a in ('findstr /i /c:"_12 RES AVAILABLE" "sures.txt" 2^>nul') do (set /a "b+=1")
- (@echo.!date! !time! %computername% !a!^/!b!)>>"Agent.txt"
- rem 生成电话资源使用情况统计文件
- if not exist "Telephony.txt" (echo.日期 时间 机器名 电话使用数量/空余数量)>"Telephony.txt"
- for /f "delims=" %%a in ('findstr /i /c:"_8 RES IN USE" "sures.txt" 2^>nul') do (set /a "c+=1")
- for /f "delims=" %%a in ('findstr /i /c:"_8 RES AVAILABLE" "sures.txt" 2^>nul') do (set /a "d+=1")
- (@echo.!date! !time! %computername% !c!^/!d!)>>"Telephony.txt"
- rem 生成动态库使用情况统计文件
- if not exist "Ntdll.txt" (echo.日期 时间 机器名 动态库使用数量/空余数量)>"Ntdll.txt"
- for /f "delims=" %%a in ('findstr /i /c:"_15 RES IN USE" "sures.txt" 2^>nul') do (set /a "e+=1")
- for /f "delims=" %%a in ('findstr /i /c:"_15 RES AVAILABLE" "sures.txt" 2^>nul') do (set /a "f+=1")
- (@echo.!date! !time! %computername% !e!^/!f!)>>"Ntdll.txt"
- rem 生成数据库使用情况统计文件
- if not exist "database.txt" (echo.日期 时间 机器名 数据库使用数量/空余数量)>"Database.txt"
- for /f "delims=" %%a in ('findstr /i /c:"_4 RES IN USE" "sures.txt" 2^>nul') do (set /a "g+=1")
- for /f "delims=" %%a in ('findstr /i /c:"_4 RES AVAILABLE" "sures.txt" 2^>nul') do (set /a "h+=1")
- (@echo.!date! !time! %computername% !g!^/!h!)>>"Database.txt"
- rem 生成SOAP使用情况统计文件
- if not exist "SOAP.txt" (echo.日期 时间 机器名 SOAP使用数量/空余数量)>"SOAP.txt"
- for /f "delims=" %%a in ('findstr /i /c:"_50 RES IN USE" "sures.txt" 2^>nul') do (set /a "i+=1")
- for /f "delims=" %%a in ('findstr /i /c:"_50 RES AVAILABLE" "sures.txt" 2^>nul') do (set /a "j+=1")
- (@echo.!date! !time! %computername%! !i!^/!j!)>>"SOAP.txt"
- ping localhost -n %TM% >nul
- cls &goto :main
复制代码
哥们,以后论坛添加代码请用代码块包起来,便于复制,你这个。。。。我复制之后,删除前面的行数都花了好大一会儿#83
不用杉树 sures.txt,代码中的 sures sures >sures.txt 每次循环都会重新写 sures.txt
另外,你说的不会生成后面的文件。。。是你延时太长了。。。你每生成一个文件都延时5分钟。。。你这总共5个文件,循环一次都要25分钟了。。。
作者: fish509008 时间: 2013-12-6 08:11
回复 10# 再世情緣
嗯 昨天我已经自己找到原因了。谢谢啊
作者: fish509008 时间: 2013-12-6 08:13
回复 10# 再世情緣
#83....好熟悉的感觉。你也玩大话的吗?还是梦幻
作者: fish509008 时间: 2013-12-6 10:12
回复 10# 再世情緣
再请教你个问题!date!,!time!和%date%,%time%有什么区别?
data取值有的是"星期* YYYY-MM-DD",有的是"YYYY-MM-DD 星期* " 怎么去星期给去掉啊?
作者: DAIC 时间: 2013-12-6 10:27
!date!,!time!和%date%,%time%有什么区别?
看教程:
http://www.bathome.net/thread-2899-1-1.html
作者: fish509008 时间: 2013-12-6 12:18
回复 14# DAIC
哎,菜鸟只能是想到什么问什么了。谢谢你补充的资料,已收藏,得慢慢研究
作者: DAIC 时间: 2013-12-6 13:20
data取值有的是"星期* YYYY-MM-DD",有的是"YYYY-MM-DD 星期* " 怎么去星期给去掉啊?
- @echo off
- set "str=星期五 2013-12-06"
- REM set "str=2013-12-06 星期五"
- set mydate=%str:* =%
- if %mydate% gtr 9 (
- echo %str:~0,10%
- ) else (
- echo %mydate%
- )
- pause
复制代码
作者: fish509008 时间: 2013-12-6 13:40
下面是多方修改我最终要使用的脚本。之前没注意统计电话时出现的问题,后来自己摸索又请教他人以解决。
现在还有一点小要求,怎么能运行时生成5个dos监控窗口,而不是在一个窗口里展示,因为在一个窗口时间长了监控不方便,还得去打开txt查看。
因为事赶的紧,自己没太多时间来深入学习了,如果有哪位大师看到这,烦请给点提示。谢谢!!!- @echo off &color 0a &setlocal enabledelayedexpansion
- pushd "%cd%"
- rem 设置变量
- set Tm=300
- :main
- rem 初始化统计次数,每次循环都初始化,如果不需要,就放在 :main 标记前面
- set /a "a=b=c=d=e=f=g=h=i=j=0"
- rem 生成资源文件
- sures sures >sures.txt
- if not exist sures.txt (msg %username% /time:5 "错误!!未找到 sures.txt 文件!!!" &call exit)
- rem 生成agent资源使用情况统计文件
- if not exist "agent.txt" (echo.日期 时间 机器名 Agent使用数量/Agent空余数量)>"%computername%_agent.txt"
- for /f "delims=" %%a in ('findstr /i /c:"_12 RES IN USE" "sures.txt" 2^>nul') do (set /a "a+=1")
- for /f "delims=" %%a in ('findstr /i /c:"_12 RES AVAILABLE" "sures.txt" 2^>nul') do (set /a "b+=1")
- (echo.!date! !time! %computername% !a!^/!b!)>>"%computername%_agent.txt"
- type "%computername%_agent.txt"
- rem 生成电话资源使用情况统计文件
- if not exist "telephony.txt" (echo.日期 时间 机器名 电话使用数量/电话空余数量)>"%computername%_telephony.txt"
- for /f "delims=" %%a in ('findstr /rc:"INLINE.*_8 RES IN USE" "sures.txt" 2^>nul') do (set /a "c+=1")
- for /f "delims=" %%a in ('findstr /rc:"INLINE.*_8 RES AVAILABLE" "sures.txt" 2^>nul') do (set /a "d+=1")
- (echo.!date! !time! %computername% !c!^/!d!)>>"%computername%_telephony.txt"
- type "%computername%_telephony.txt"
- rem 生成动态库使用情况统计文件
- if not exist "ntdll.txt" (echo.日期 时间 机器名 动态库使用数量/动态库空余数量)>"%computername%_ntdll.txt"
- for /f "delims=" %%a in ('findstr /i /c:"_15 RES IN USE" "sures.txt" 2^>nul') do (set /a "e+=1")
- for /f "delims=" %%a in ('findstr /i /c:"_15 RES AVAILABLE" "sures.txt" 2^>nul') do (set /a "f+=1")
- (echo.!date! !time! %computername% !e!^/!f!)>>"%computername%_Ntdll.txt"
- type "%computername%_ntdll.txt"
- rem 生成数据库使用情况统计文件
- if not exist "database.txt" (echo.日期 时间 机器名 数据库使用数量/数据库空余数量)>"%computername%_database.txt"
- for /f "delims=" %%a in ('findstr /i /c:"_4 RES IN USE" "sures.txt" 2^>nul') do (set /a "g+=1")
- for /f "delims=" %%a in ('findstr /i /c:"_4 RES AVAILABLE" "sures.txt" 2^>nul') do (set /a "h+=1")
- (echo.!date! !time! %computername% !g!^/!h!)>>"%computername%_database.txt"
- type "%computername%_database.txt"
- rem 生成SOAP使用情况统计文件
- if not exist "soap.txt" (echo.日期 时间 机器名 SOAP使用数量/SOAP空余数量)>"%computername%_soap.txt"
- for /f "delims=" %%a in ('findstr /i /c:"_50 RES IN USE" "sures.txt" 2^>nul') do (set /a "i+=1")
- for /f "delims=" %%a in ('findstr /i /c:"_50 RES AVAILABLE" "sures.txt" 2^>nul') do (set /a "j+=1")
- (echo.!date! !time! %computername% !i!^/!j!)>>"%computername%_soap.txt"
- type "%computername%_soap.txt"
- ping localhost -n %TM% >nul
- cls &goto :main
复制代码
作者: fish509008 时间: 2013-12-6 13:46
回复 16# DAIC
感谢回复,你这个如果当前日期格式都不知道的情况下怎么去取值啊?因为写好的批处理文件是直接拷贝到其它服务器上去运行的,如果已经调查清楚,就不用这么麻烦了,直接%date:~0,10%或者%date:~4,10%就行了。
作者: DAIC 时间: 2013-12-6 21:24
回复 18# fish509008
你把16楼代码的第二行注释掉,把第三行的REM删掉,再试试。
作者: 再世情緣 时间: 2013-12-7 08:35
本帖最后由 再世情緣 于 2013-12-10 07:26 编辑
- @echo off &color 0a &setlocal enabledelayedexpansion
- title 资源监视
- Rem 格式化date
- for /f "tokens=1,2" %%a in ("%date%") do (echo.%%a | findstr "星期" >nul &&set "date=!date: *=!" ||set "date=!date: 星期*=!")
- pushd "%cd%"
- rem 设置变量 Tm=循环时间,ds=创建监视进程偏移行数,tsk=任务偏移行数,谨慎修改!!!!!
- set /a "Tm=300","ds=27","tsk=35"
- :main
- rem 生成资源文件
- sures sures >sures.txt
- if not exist sures.txt (msg %username% /time:5 "错误!!未找到 sures.txt 文件!!!" &call exit)
- for /f "tokens=1,2,3 delims==" %%a in ('more "%~f0" +%tsk%') do (
- set /a "i=0","j=0"
- set "name=%%a" &set "tk1=%%b" &set "tk2=%%c"
- if not exist "%computername%_!name!.txt" (echo.日期 时间 机器名 !name!使用数量^/!name!空余数量)>"%computername%_!name!.txt"
- for /f "delims=" %%1 in ('findstr /i /c:"!tk1!" "sures.txt" 2^>nul') do (set /a "i+=1")
- for /f "delims=" %%1 in ('findstr /i /c:"!tk2!" "sures.txt" 2^>nul') do (set /a "j+=1")
- (echo.!date! !time! %computername% !i!^/!j!)>>"%computername%_!name!.txt"
- Rem 创建监视进程命令
- if not exist "!name!.bat" ((more "%~f0" +!ds!)>"!name!.bat" )
- Rem 运行监视进程命令
- (tasklist /v | findstr /I "cmd.exe") | findstr /i "!name!" >nul || start "" "!name!.bat"
- )
- ping localhost -n %Tm% >nul
- cls &goto :main
-
- Rem 监视进程命令
- @echo off &color 0a
- title %~n0
- :ds
- type "%computername%_%~n0.txt"
- ping localhost -n 30 >nul
- cls &goto :ds
-
- Rem Tsk 任务
- Agent=_12 RES IN USE=_12 RES AVAILABLE
- Telephony=INLINE.*_8 RES IN USE=INLINE.*_8 RES AVAILABLE
- Ntdll=_15 RES IN USE=_15 RES AVAILABLE
- Datebase=_4 RES IN USE=_4 RES AVAILABLE
- Soap=_50 RES IN USE=_50 RES AVAILABLE
复制代码
优化之后的代码,运行之后,会生成5个对应的监视窗口,监视窗口30秒更新窗口,
关于格式化date,本人是win7 64位,%date% 格式是 yyyy/mm/dd 没有星期。。。。所以,无法验证,但是,理论上应该不会出错。。。
作者: fish509008 时间: 2013-12-7 09:34
回复 20# 再世情緣
佩服佩服!!!!
我研究了大半宿刚刚知道怎么去开新窗口呢。之前的代码我都没想着能这么优化
作者: fish509008 时间: 2013-12-7 10:59
回复 20# 再世情緣
经过测试发现每个资源都始终只有一条,几个监视窗口倒是定时刷新了,但是写文件的循环不知道为何没生效,我水平有限,没查到原因呢。
作者: fish509008 时间: 2013-12-7 18:56
回复 20# 再世情緣
修改的代码我完全理解不了,要学的还好多啊
作者: 再世情緣 时间: 2013-12-8 10:29
回复 再世情緣
经过测试发现每个资源都始终只有一条,几个监视窗口倒是定时刷新了,但是写文件的循环不 ...
fish509008 发表于 2013-12-7 10:59
不好意思,因为之前测试的时候,我这里没有sures来生成sures.txt,只有用你附件带的sures.txt测试,所以。。。我把第十行::sures sures >sures.txt给注释掉了
现在代码已经改过了,不好意思哈
作者: fish509008 时间: 2013-12-8 11:01
回复 24# 再世情緣
之前也都是注释掉的啊,“::”和rem作用不是相同的么?另外sures.txt是我从服务器上导下来的,测试时我也是一直在自己笔记本上测试的。
作者: 再世情緣 时间: 2013-12-8 13:40
回复 25# fish509008
::和rem 是一样的啊,我在我这测试是OK的啊,网络有点问题,图片无法上传。。。
不然就给你看截图了
作者: fish509008 时间: 2013-12-8 14:43
回复 26# 再世情緣
我试了好久都不行#83。受你的启发,我不打算一次性开那么多监视窗口了。打算先直接生成各类资源文件,然后要监控哪个就直接运行生成的BAT文件即可,因为有些资源可能都不使用(这是我后来发现的)。
这次真是非常感谢你的帮助,我现在发现好多复杂的事情都可以用批处理来解决,最近也一直在补习这门功课。以后有疑问的地方可能还会向你求教,希望没打扰到你
作者: 再世情緣 时间: 2013-12-8 15:19
回复 27# fish509008
没事,互相学习,这论坛里还是有不少好的教程的
作者: fish509008 时间: 2013-12-8 21:38
回复 28# 再世情緣
经过几天学习和你的教导,我更改的最终版本是这样的。
一共分三部分: 如代码执行效率有不完善的地方,请多多赐教。
第一部分,文件生成!(count.bat)- @echo off &color 0a &setlocal enabledelayedexpansion
- pushd "%cd%"
- :main
- sures sures >sures.txt
- for /f "tokens=1,2,3,4 delims==" %%a in (config.txt) do (
- set /a "i=0","j=0"
- set "name=%%a" &set "tk1=%%b" &set "tk2=%%c" &set "t=%%d"
- if not exist "%computername%_!name!.txt" (echo.data time computername !name!^<Inuse^>^/^<Available^>)>"%computername%_!name!.txt"
- for /f "delims=" %%1 in ('findstr /i /c:"!tk1!" "sures.txt" ^>nul 2^>nul') do (set /a "i+=1")
- for /f "delims=" %%1 in ('findstr /i /c:"!tk2!" "sures.txt" ^>nul 2^>nul') do (set /a "j+=1")
- (echo.%date:~0,10% %time:~0,8% %computername% !i!^/!j!)>>"%computername%_!name!.txt"
- )
- ping localhost -n %t% >nul 2>nul
- 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,代码都一样)- @echo off &color 0a
- title %~n0
- set /a "t=10"
- :ds
- type "%computername%_%~n0.txt"
- ping localhost -n %t% >nul 2>nul
- cls &goto :ds
复制代码
作者: 再世情緣 时间: 2013-12-9 08:57
回复 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,没必要设变量
作者: fish509008 时间: 2013-12-9 09:24
回复 30# 再世情緣
嗯,接收的建议。我是想不要对bat源码进行更改就可以设置循环时间的。date和time的是我自己觉得这两个占的位数挺长的 ,想把它们给尽量缩短点。
周末运行了两天,循环计数时间为10秒,刚才统计了下,5个资源统计文件一共才4.3M,比我想想的要小很多很多。
作者: fish509008 时间: 2013-12-9 22:22
本帖最后由 fish509008 于 2013-12-9 22:23 编辑
回复 30# 再世情緣
不好意思啊,好像还是有点问题,配置文件中一共5个资源和搜索条件,但是telephony的统计错误,使用量和可用量都是0,有空帮我分析下。
sures.txt就用之前附件里提供的就行。
count.bat代码如下:- @echo on &color 0a &setlocal enabledelayedexpansion
- pushd "%cd%"
- :main
- rem sures sures >sures.txt
- for /f "tokens=1,2,3 delims==" %%a in (config.txt) do (set /a "i=j=0"
- if not exist "%computername%_%%a.txt" (echo.data time computername %%a^<Inuse^>^/^<Available^>)>"%computername%_%%a.txt"
- for /f "delims=" %%1 in ('findstr /i /c:"%%b" "sures.txt" 2^>nul') do (set /a i+=1)
- for /f "delims=" %%1 in ('findstr /i /c:"%%c" "sures.txt" 2^>nul') do (set /a j+=1)
- (echo.!date! !time! %computername% !i!^/!j!)>>"%computername%_%%a.txt")
- echo %%d
- ping localhost -n 30 >nul
- cls &goto :main
复制代码
作者: 再世情緣 时间: 2013-12-10 07:27
回复 32# fish509008
我晕!!!你那附件里根本没有telephony的信息!!!
出错估计是你查找字符串里包含通配符*的问题,你试下把*去掉,换成具体的字符串
作者: fish509008 时间: 2013-12-10 08:46
回复 33# 再世情緣
我又上传了一遍sures.txt
telephony要搜索的字符串是“ LINE.*_8 RES IN USE”和“ LINE.*_8 RES AVAILABLE”
*代表的是000-119之类的数字。前面的空格是为了区分非INLINE的
作者: fish509008 时间: 2013-12-10 08:55
回复 33# 再世情緣
另外再请教你点问题,能不能做到监控窗口刷新时,只增加显示最新一条数据,原有数据还在窗口内,我发现如果生成的统计数据很多的话,每次刷新都是从头到尾的刷新,窗口里的数据滚动好久才能看到最后一条,然后还没等看明白呢,又重新刷一遍....感觉很不妥的样子
作者: fish509008 时间: 2013-12-10 10:11
回复 33# 再世情緣
加个/r 解决了无法查找telephony的问题
作者: lky216 时间: 2013-12-10 11:41
回复 15# fish509008
菜鸟待飞翔
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |