找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 27893|回复: 9

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

[复制链接]
发表于 2012-6-1 17:00:48 | 显示全部楼层 |阅读模式
本帖最后由 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运行失败时,怎么才能准确检测出来)
发表于 2012-6-1 17:14:12 | 显示全部楼层
  1. tasklist | findstr acc.exe && echo yes || echo no >>xx.log 2>&1
复制代码
 楼主| 发表于 2012-6-4 19:57:16 | 显示全部楼层
回复 2# gawk


    你这个只能检测只有一个进程的,当有相同的进程在任务管理器里,检测就不准确了,比如检测后面的123.exe和456.exe,就不准确了,有没有办法准确的检测123.exe和456.exe啊
发表于 2012-6-4 20:34:19 | 显示全部楼层
回复 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
)
发表于 2012-6-4 23:02:17 | 显示全部楼层
  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
复制代码
 楼主| 发表于 2012-6-5 15:57:30 | 显示全部楼层
回复 4# poter


    如果开启第二个123.exe和456.exe检测就不准确了,能不能在开启第二个123.exe和456.exe时,在任务管理器里面找123.exe和456.exe,然后把123.exe和456.exe相加,看结果是不是有两个123.exe和两个456.exe,如果不是就输出一个进程开始失败的结果,如果结果是就输出成功的结果,这样就准确些,能这样写吗
发表于 2012-6-5 18:08:31 | 显示全部楼层
  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
复制代码
 楼主| 发表于 2012-6-12 10:03:08 | 显示全部楼层
回复 7# powerbat


    你这个批处理启动进程太快了,我要的是能够每5秒开一个进程
 楼主| 发表于 2012-6-12 13:18:23 | 显示全部楼层
回复 2# gawk


    你这个方法可以把PID列出来,能不能通过去对比进程的PID来检测是否开启成功啊,当开启第二个相同的进程,如果PID跟第一个相同的话,就算开启失败了,如果是一个新的PID就是开启成功了
发表于 2012-6-13 15:11:07 | 显示全部楼层
回复 8# zhou926


    在13行与14行之间插入 PING 1.1.1.1 -n 1 -w 5000 >NUL
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 06:08 , Processed in 0.011585 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表