返回列表 发帖
本帖最后由 再世情緣 于 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

回复 5# fish509008


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

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

本帖最后由 再世情緣 于 2013-12-10 07:26 编辑
  1. @echo off &color 0a &setlocal enabledelayedexpansion
  2. title 资源监视
  3. Rem 格式化date
  4. for /f "tokens=1,2" %%a in ("%date%") do (echo.%%a | findstr "星期" >nul &&set "date=!date: *=!" ||set "date=!date: 星期*=!")
  5. pushd "%cd%"
  6. rem 设置变量 Tm=循环时间,ds=创建监视进程偏移行数,tsk=任务偏移行数,谨慎修改!!!!!
  7. set /a "Tm=300","ds=27","tsk=35"
  8. :main
  9. rem 生成资源文件
  10. sures sures >sures.txt
  11. if not exist sures.txt (msg %username% /time:5 "错误!!未找到 sures.txt 文件!!!" &call exit)
  12. for /f "tokens=1,2,3 delims==" %%a in ('more "%~f0" +%tsk%') do (
  13.   set /a "i=0","j=0"
  14.   set "name=%%a" &set "tk1=%%b" &set "tk2=%%c"
  15.   if not exist "%computername%_!name!.txt" (echo.日期 时间 机器名 !name!使用数量^/!name!空余数量)>"%computername%_!name!.txt"
  16.   for /f "delims=" %%1 in ('findstr /i /c:"!tk1!" "sures.txt" 2^>nul') do (set /a "i+=1")
  17.   for /f "delims=" %%1 in ('findstr /i /c:"!tk2!" "sures.txt" 2^>nul') do (set /a "j+=1")
  18.   (echo.!date!  !time!   %computername%   !i!^/!j!)>>"%computername%_!name!.txt"
  19.   Rem 创建监视进程命令
  20.   if not exist "!name!.bat" ((more "%~f0" +!ds!)>"!name!.bat" )
  21.   Rem 运行监视进程命令
  22.   (tasklist /v | findstr /I "cmd.exe") | findstr /i "!name!" >nul || start "" "!name!.bat"
  23. )
  24. ping localhost -n %Tm% >nul
  25. cls &goto :main
  26. Rem 监视进程命令
  27. @echo off &color 0a
  28. title %~n0
  29. :ds
  30. type "%computername%_%~n0.txt"
  31. ping localhost -n 30 >nul
  32. cls &goto :ds
  33. Rem Tsk 任务
  34. Agent=_12     RES IN USE=_12  RES AVAILABLE
  35. Telephony=INLINE.*_8     RES IN USE=INLINE.*_8  RES AVAILABLE
  36. Ntdll=_15     RES IN USE=_15  RES AVAILABLE
  37. Datebase=_4     RES IN USE=_4  RES AVAILABLE
  38. Soap=_50     RES IN USE=_50  RES AVAILABLE
复制代码
优化之后的代码,运行之后,会生成5个对应的监视窗口,监视窗口30秒更新窗口,
关于格式化date,本人是win7 64位,%date% 格式是 yyyy/mm/dd   没有星期。。。。所以,无法验证,但是,理论上应该不会出错。。。

TOP

回复  再世情緣

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


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

TOP

回复 25# fish509008


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

TOP

回复 27# fish509008


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

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

回复 32# fish509008


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

TOP

返回列表