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

[文本处理] 【求助】监控系统进程是否运行,并写入txt启动时间和次数

win2008,有个进程常自己关闭,想写一个BAT,每隔10分钟检测系统进程里是否有该进程。

如有,则再继续监控,如没有,则启动该程序,并同时生成一个 txt 文件,将每一次的启动时间记录下来。

=========== 想象中的输出结果 ==========
2018年05月24日星期四9:09:50;启动第1次
2018年05月24日星期四9:11:01;启动第2次
2018年05月24日星期四9:11:08;启动第3次
2018年05月24日星期四9:11:27;启动第4次
2018年05月24日星期四9:11:40;启动第5次
2018年05月24日星期四9:11:53;启动第6次
2018年05月24日星期四9:12:25;启动第7次
2018年05月24日星期四9:14:29;启动第8次
2018年05月24日星期四11:55:22;启动第9次
2018年05月24日星期四11:56:28;启动第10次
...
如此类推
================================

附上自己写的代码:
---------------------------
@ECHO OFF
:check
tasklist > %temp%\tasklist.txt
find /i %temp%\tasklist.txt "admin.exe"
cls
if errorlevel 1 (goto st) else ((set a=6)&(goto show))            脚本里的a=6是为了测试,将时间设为 6秒检测一次

:st
start D:\AutoUpdate\Client.exe     启动的程序路径
echo %date:~0,4%年%date:~5,2%月%date:~8,2%日星期%DATE:~-1%%time:~0,8%;启动第 ? 次 >> E:\Client_Logs.txt
cls
set a=6                                 脚本里的a=6是为了测试,将时间设为 6秒检测一次

goto show

:show
set /a a=a-1
ping -n 2 -w 500 127.1>nul
cls
echo.
echo                              请勿关闭本窗口
echo\
echo.
echo.
echo.
echo            后台服务已经运行,10分钟后再检测!!    倒计时:%a% 秒
if %a%==0 (goto check) else (goto show)
------------------------------------------------------

我已经实现了某一行的前半部分功能,    如:2018年05月24日星期四11:56:28
后半功能就不懂搞了:   启动第10次...   (这个次数会随着启动该程序的次数而递增的。。。)

请各位高手解答。谢谢!!!

本帖最后由 yhcfsr 于 2018-5-24 18:14 编辑

以优酷为例,按需改第2,3行;输出文件路径改第11行:
  1. @echo off
  2. set "task=youku"
  3. set "prog_path=E:\APP\YouKu\YoukuClient\Youku.exe"
  4. set "start_times=0"
  5. :begin
  6. set "find_task="&set "event_record="
  7. for /f "delims= " %%a in ('tasklist^|findstr /i /r "%task%"') do set "find_task=true"
  8. if not defined find_task (start "" "%prog_path%"&set/a start_times+=1)
  9. if not defined find_task (set "event_record=%date%%time% ;启动第%start_times%次")
  10. if  defined event_record (echo;%event_record%)
  11. if  defined event_record (echo;%event_record%)>>"event.log"
  12. timeout /t 600 /nobreak
  13. goto:begin
复制代码
第二种方案,用以下脚本启动程序,程序运行中,脚本暂停扫描;一旦进程中止,立即启动程序,不会有延时。
无论从资源占用还是程序功能,这种方案比第一种都要有优势。
  1. @echo off
  2. set "task=youku"
  3. set "prog_path=E:\APP\YouKu\YoukuClient\Youku.exe"
  4. set "start_times=0"
  5. :begin
  6. set "start_record="
  7. tasklist|findstr /ri "%task%"||(
  8. set/a "start_times+=1"&setlocal enabledelayedexpansion
  9. set "start_record=%date%%time%;启动!start_times!次"
  10. echo;!start_record!
  11. echo;!start_record!>>envent.log
  12. endlocal
  13. "%prog_path%"
  14. )
  15. goto:begin
复制代码
QQ 33892006

TOP

以优酷为例,按需改第2,3行;输出文件路径改第11行:第二种方案,用以下脚本启动程序,程序运行中,脚本暂停 ...
yhcfsr 发表于 2018-5-24 17:46



谢谢热心解答,你的代码很简单,但却能很好的解决我提出的问题。给你点32个赞!!!谢谢。。

那我再提个小要求吧,如我的例子般,可以在 cmd 窗口里不要显示一些记录,就固定显示一些警示的内容,
如:
-------------------------
请勿关闭本窗口

正在实时监控后台服务是否运行...
--------------------------

TOP

返回列表