批处理查找非自身的CMD进程
也就是我已经运行了一个A.bat批处理了,可是我又运行了一个B.bat批处理,因为他们都是调用CMD的,希望B.bat可以在发现有一个非自身的CMD后,执行GotoY命令...
也就是我已经运行了一个A.bat批处理了,可是我又运行了一个B.bat批处理,因为他们都是调用CMD的,希望B.bat可以在发现有一个非自身的CMD后,执行Goto Y命令,没有的话执行Got W 。taskkill /f /IM CMD.exe是不可取的,应为它会把自身也列进去。另外我想用Pid应该是可以的,只是不知道如何实现。
展开
展开全部
@REM 2012/05/22
@TITLE ONLYONE
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET Commander=ONLYONE
SET CHECK_Name=CMD.exe
:CHECK
TASKLIST /NH /FI "WINDOWTITLE NE %Commander%" 2>NUL | FINDSTR /I "%CHECK_Name%" 1>NUL
SET Temp=%errorlevel%
IF "!Temp!"=="0" GOTO A
IF "!Temp!"=="1" GOTO B
:A
ECHO.发现 非销袜本身BAT正在运行
ECHO.按任意键 结束非本身正姿基在运行BAT&PAUSE>NUL
TASKKILL /FI "WINDOWTITLE NE %Commander%" /IM "CMD.EXE">NUL 2>NUL
PAUSE
EXIT
:B
ECHO.没有 非本身BAT正在亏册激运行
PAUSE
EXIT
注意事项
实现原理 通过判断窗口标题 来实现
确保 批处理 没有通过VBS后台运行
希望能对你有所帮助
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果仅是伏团银判断是否运行有别的cmd 统计cmd.exe进程的个数是否大于1就行了缺宴或如
for /f %%i in ('tasklist^|find /i "cmd.exe"')do set/a n+=1
if %n% gtr 1 (goto :Y) else goto :w
for /f %%i in ('tasklist^|find /i "cmd.exe"')do set/a n+=1
if %n% gtr 1 (goto :Y) else goto :w
追问
你的思路挺好的,现在我又有一个想法,如果我知道了一个程序的PID值,那该如何根据PID值判断,这个程序是否存在,谢谢了。如果不会的话也没关系,你的方法也可以的了。只是我想知道如何根据PID判断。这个分就给你了。
追答
那你怎么提前知道一个程序的PID呢?可能没明白你的意思 据我理解,当一个程序启动时就系统就启动了一个进程,并为其自动分配一个PID号,临时的“挂号”之前并不对应,正如提问情况那样cmd.exe为名的进程可以有多个 但每个进程的PID却是唯一的,要准确中止某个进程当然应该用PID,我回答过一个用批处理去关闭另外的批处理的问题,就是根据PID来排除本批处理进程的 http://zhidao.baidu.com/question/270709693.html
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你没说要干掉运行的a.bat啊,只判断是否发现cmd在运行。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询