标题: [其他] 批处理如何检测进程中程序的运行? [打印本页]
作者: coolmir2 时间: 2009-3-11 03:59 标题: 批处理如何检测进程中程序的运行?
我想写一个批处理,检测一个软件是否运行,如果没有运行就提示是否运行这个程序,当输入“Y”时就运行这个程序,否则关闭,而这个程序具体在硬盘什么地方还不知道。只知道可执行程序(比如说QQ.exe但不知道它路径)当启动这个程序后延时5秒后执行下一个批处理。
[ 本帖最后由 coolmir2 于 2009-3-13 01:22 编辑 ]
作者: newxso 时间: 2009-3-13 19:25
- @echo off
- ::定义要启动的程序名称
- set "pro_name=QQ.exe"
- for /f "delims=" %%a in ("%pro_name%") do set "name=%%~na_path"
- ::如果记录路径的文件存在则直接提取程序路径
- if not exist c:\windows\%name%.txt goto :0001
- for /f "delims=" %%a in (c:\windows\%name%.txt) do (
- set pro_path=%%~a
- set p_name=%%~nxa
- )
- if /i "%p_name%"=="%pro_name%" goto :0002
-
- :0001
- echo 正在搜索 %pro_name%,请稍等...
- for %%a in (c d e f g h i j k l m n o p q r s t u v w x y z) do (
- if exist %%a:\ (
- pushd %%a:\
- for /r %%b in ("*%pro_name%") do (
- if /i "%%~nxb"=="%pro_name%" set "pro_path=%%b")
- popd
- ))
- ::用文本记录程序路径以便下次快速获取
- echo/%pro_path%>c:\windows\%name%.txt&cls
- if not "%pro_path%"=="" (
- echo 检测成功,程序安装在:%pro_path%
- ) else (
- echo 没有检测到 %pro_name% 程序!
- ping 127.1 /n ^3>nul&&exit/b
- )
-
- :0002
- ::检测程序是否运行
- tasklist|find /i "%pro_name%" >nul||goto :0003
- echo 程序已经在运行,3秒后自动退出...
- ping 127.1 /n ^3>nul&&exit/b
-
- :0003
- cls
- echo 已经启动提问提示框,如果运行该程序请点击“是”按扭!
- echo Wsh.Echo MsgBox(" 你想运行%pro_name%吗?",vbYesNo,"询问")>ask.vbs
- for /f %%d in ('cscript ask.vbs //nologo //e:vbscript') do if %%d equ 6 (del ask.vbs&&goto :0004)
- cls
- echo 你没有选择启动程序,3秒后自动退出...
- del ask.vbs
- ping 127.1 /n ^3>nul&&exit/b
-
- :0004
- cls
- echo 正在启动 %pro_name% ...
- start "" "%pro_path%"
- ping 127.1 /n ^5>nul
- start "" c:\test\test.bat
- exit/b
复制代码
完善一下之前的代码,增加对记录路径文本的内容检测,把全盘搜索用 for /r 语句代替,提高搜索文件的速度。
[ 本帖最后由 newxso 于 2009-3-15 21:05 编辑 ]
作者: Batcher 时间: 2009-3-13 22:09
- @echo off
- setlocal enabledelayedexpansion
- rem 指定进程名称
- set "ProcessName=notepad.exe"
- rem 指定软件名称
- set "strFileName=notepad.exe"
- rem 指定待运行的下一个批处理
- set NextBat=C:\test\a.bat
- set strFileDirc=
- set UserInput=
- tasklist|find /i "%ProcessName%"||set /p UserInput=是否运行程序%strFileName%?
- if /i "%UserInput%" equ "Y" (
- echo 正在启动软件%strFileName%,请稍候...
- call :GetFileDirc !strFileName! strFileDirc
- if "!strFileDirc!" neq "" (
- start "" "%strFileDirc%"
- ping -n 6 127.1 >nul
- start "" "%NextBat%"
- ) else (
- echo 找不到软件%strFileName%
- )
- ) else (
- goto :eof
- )
- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- ::call :GetFileDirc %strFileName% strFileDirc
- :GetFileDirc
- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- :GetFileDirc
- for %%a in ("%1") do (
- set "nName=%%~na"
- set "xName=%%~xa"
- )
- set "xName=%xName:~1%"
- for /f "skip=1 delims=" %%a in ('wmic datafile where "filename='%nName%' and Extension='%xName%'" get name') do (
- set "%2=%%a"
- )
复制代码
作者: coolmir2 时间: 2009-3-14 00:09
谢谢,代码好多哦。看了半天没看懂。呵呵。那检测进程中程序的运行是那一个代码呢?
作者: 骚鸡 时间: 2009-3-14 12:11
复杂。。。。。。。。。。。。。。。。。。
作者: Batcher 时间: 2009-3-14 14:52 标题: 回复 4楼 的帖子
tasklist + find
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |