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

[系统相关] 批处理准确检测多个相同进程运行的状态,然后将检测的结果输出到一个文本中

本帖最后由 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运行失败时,怎么才能准确检测出来)

  1. tasklist | findstr acc.exe && echo yes || echo no >>xx.log 2>&1
复制代码

TOP

回复 2# gawk


    你这个只能检测只有一个进程的,当有相同的进程在任务管理器里,检测就不准确了,比如检测后面的123.exe和456.exe,就不准确了,有没有办法准确的检测123.exe和456.exe啊

TOP

回复 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
)

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. set "n1=d:\acc\acc.exe"&set "n2=d:\rel\rel.exe"
  3. set "n3=d:\sec\sec.exe"&set "n4=d:\msg1\123.exe"
  4. set "n5=d:\msg1\456.exe"&set "n6=d:\msg2\123.exe"
  5. set "n7=d:\msg2\456.exe"
  6. (for /l %%a in (1 1 7) do (
  7.   wmic process get executablepath|find /i "!n%%a!">nul && echo !n%%a!成功 || echo !n%%a!失败
  8. ))>xx.log
复制代码

TOP

回复 4# poter


    如果开启第二个123.exe和456.exe检测就不准确了,能不能在开启第二个123.exe和456.exe时,在任务管理器里面找123.exe和456.exe,然后把123.exe和456.exe相加,看结果是不是有两个123.exe和两个456.exe,如果不是就输出一个进程开始失败的结果,如果结果是就输出成功的结果,这样就准确些,能这样写吗

TOP

  1. @echo off
  2. setlocal enableDelayedExpansion
  3. set "run=wmic process call create"
  4. ((((((((((
  5. for %%a in (
  6. "d:\acc\acc.exe"
  7. "d:\rel\rel.exe"
  8. "d:\sec\sec.exe"
  9. "d:\msg1\123.exe"
  10. "d:\msg1\456.exe"
  11. "d:\msg2\123.exe"
  12. "d:\msg2\456.exe"
  13. ) do echo run "%%~a">&2 & %run% "%%~a","%%~dpa"|findstr ProcessId >~tmp && (
  14.     for /f "tokens=1,2 delims==; " %%i in (~tmp) do set %%i=%%j
  15.     set /p=Succeed to run "%%~a", <nul
  16.     wmic process !ProcessId! get name|find /i "%%~nxa" >nul && (echo OK.) || (echo but it died subsequently^^!)
  17. ) || (echo Failed to run "%%~a" ^^!)
  18. )))))))))) >xx.log
  19. del ~tmp
  20. pause
  21. start xx.log
复制代码

TOP

回复 7# powerbat


    你这个批处理启动进程太快了,我要的是能够每5秒开一个进程

TOP

回复 2# gawk


    你这个方法可以把PID列出来,能不能通过去对比进程的PID来检测是否开启成功啊,当开启第二个相同的进程,如果PID跟第一个相同的话,就算开启失败了,如果是一个新的PID就是开启成功了

TOP

回复 8# zhou926


    在13行与14行之间插入 PING 1.1.1.1 -n 1 -w 5000 >NUL

TOP

返回列表