标题: [系统相关] 批处理准确检测多个相同进程运行的状态,然后将检测的结果输出到一个文本中 [打印本页]
作者: zhou926 时间: 2012-6-1 17:00 标题: 批处理准确检测多个相同进程运行的状态,然后将检测的结果输出到一个文本中
本帖最后由 zhou926 于 2012-6-13 14:39 编辑
echo open Acc
cd D:\acc
start acc.exe
检测是否存在acc.exe,存在就返回成功结果值,不存在就返回失败结果值,然后将返回成功和失败的结果值写入到xx.log文件中
PING 1.1.1.1 -n 1 -w 3000 >NUL echo open Rel
cd\
cd D:\rel
start rel.exe
检测是否存在rel.exe,存在就返回成功结果值,不存在就返回失败结果值,然后将返回成功和失败的结果值写入到xx.log文件中
PING 1.1.1.1 -n 1 -w 3000 >NUL echo open Sec
cd\
cd D:\sec
start sec.exe
检测是否存在sec.exe,存在就返回成功结果值,不存在就返回失败结果值,然后将返回成功和失败的结果值写入到xx.log文件中
PING 1.1.1.1 -n 1 -w 3000 >NUL echo open msg1
cd D:\msg1
start 123.exe
PING 1.1.1.1 -n 1 -w 5000 >NUL
start 456.exe
检测是否存在123.exe和456.exe,存在就返回成功结果值,不存在就返回失败结果值,然后将返回成功和失败的结果值写入到xx.log文件中
PING 1.1.1.1 -n 1 -w 5000 >NUL echo open msg2
cd D:\msg2
start 123.exe
PING 1.1.1.1 -n 1 -w 5000 >NUL
start 456.exe
检测是否存在123.exe和456.exe,存在就返回成功结果值,不存在就返回失败结果值,然后将返回成功和失败的结果值写入到xx.log文件中
PING 1.1.1.1 -n 1 -w 5000 >NUL echo open msg3
cd D:\msg3
start 123.exe
PING 1.1.1.1 -n 1 -w 5000 >NUL
start 456.exe
检测是否存在123.exe和456.exe,存在就返回成功结果值,不存在就返回失败结果值,然后将返回成功和失败的结果值写入到xx.log文件中
PING 1.1.1.1 -n 1 -w 5000 >NUL echo open msg4
cd D:\msg4
start 123.exe
PING 1.1.1.1 -n 1 -w 5000 >NUL
start 456.exe
检测是否存在123.exe和456.exe,存在就返回成功结果值,不存在就返回失败结果值,然后将返回成功和失败的结果值写入到xx.log文件中
PING 1.1.1.1 -n 1 -w 5000 >NUL
(当第二个123.exe和456.exe运行失败时,怎么才能准确检测出来)
作者: gawk 时间: 2012-6-1 17:14
- tasklist | findstr acc.exe && echo yes || echo no >>xx.log 2>&1
复制代码
作者: zhou926 时间: 2012-6-4 19:57
回复 2# gawk
你这个只能检测只有一个进程的,当有相同的进程在任务管理器里,检测就不准确了,比如检测后面的123.exe和456.exe,就不准确了,有没有办法准确的检测123.exe和456.exe啊
作者: poter 时间: 2012-6-4 20:34
回复 3# zhou926
不明白你的意思。tasklist可以检测相同名字进程的,而且每个进程的PID又不一样
你在这个命令的外面套一个for循环,然后把想要检测的放进括号里,就可以了嘛
@echo off
for %%i in (360sd.exe 360tray.exe xxx.exe) do (
echo %%i
tasklist | findstr "%%i">nul && echo yes>>xx.log || echo no >>xx.log
)
作者: apang 时间: 2012-6-4 23:02
- @echo off&setlocal enabledelayedexpansion
- set "n1=d:\acc\acc.exe"&set "n2=d:\rel\rel.exe"
- set "n3=d:\sec\sec.exe"&set "n4=d:\msg1\123.exe"
- set "n5=d:\msg1\456.exe"&set "n6=d:\msg2\123.exe"
- set "n7=d:\msg2\456.exe"
- (for /l %%a in (1 1 7) do (
- wmic process get executablepath|find /i "!n%%a!">nul && echo !n%%a!成功 || echo !n%%a!失败
- ))>xx.log
复制代码
作者: zhou926 时间: 2012-6-5 15:57
回复 4# poter
如果开启第二个123.exe和456.exe检测就不准确了,能不能在开启第二个123.exe和456.exe时,在任务管理器里面找123.exe和456.exe,然后把123.exe和456.exe相加,看结果是不是有两个123.exe和两个456.exe,如果不是就输出一个进程开始失败的结果,如果结果是就输出成功的结果,这样就准确些,能这样写吗
作者: powerbat 时间: 2012-6-5 18:08
- @echo off
- setlocal enableDelayedExpansion
- set "run=wmic process call create"
- ((((((((((
- for %%a in (
- "d:\acc\acc.exe"
- "d:\rel\rel.exe"
- "d:\sec\sec.exe"
- "d:\msg1\123.exe"
- "d:\msg1\456.exe"
- "d:\msg2\123.exe"
- "d:\msg2\456.exe"
- ) do echo run "%%~a">&2 & %run% "%%~a","%%~dpa"|findstr ProcessId >~tmp && (
- for /f "tokens=1,2 delims==; " %%i in (~tmp) do set %%i=%%j
- set /p=Succeed to run "%%~a", <nul
- wmic process !ProcessId! get name|find /i "%%~nxa" >nul && (echo OK.) || (echo but it died subsequently^^!)
- ) || (echo Failed to run "%%~a" ^^!)
- )))))))))) >xx.log
- del ~tmp
- pause
- start xx.log
复制代码
作者: zhou926 时间: 2012-6-12 10:03
回复 7# powerbat
你这个批处理启动进程太快了,我要的是能够每5秒开一个进程
作者: zhou926 时间: 2012-6-12 13:18
回复 2# gawk
你这个方法可以把PID列出来,能不能通过去对比进程的PID来检测是否开启成功啊,当开启第二个相同的进程,如果PID跟第一个相同的话,就算开启失败了,如果是一个新的PID就是开启成功了
作者: powerbat 时间: 2012-6-13 15:11
回复 8# zhou926
在13行与14行之间插入 PING 1.1.1.1 -n 1 -w 5000 >NUL
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |