找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 5961|回复: 11

高手帮忙!!! 怎么获取一个进程的存在,然后根据是否存在分别执行命令?

[复制链接]
发表于 2011-12-15 21:32:32 | 显示全部楼层 |阅读模式
假设要查看是否有notepad.exe进程存在,是不用
tasklist /fi "imagename eq notepad.exe"
我用if的errorlevel不行,应该怎么写啊?

[ 本帖最后由 dreamneo 于 2011-12-19 09:30 编辑 ]
发表于 2011-12-16 02:24:03 | 显示全部楼层
呵呵,本菜鸟只想出本笨法子,试试看看:

---------------------------------------------分割线---------------------------------------------------
@echo off
set a=notepad.exe
for /f "tokens=2" %%i in ('tasklist /fi "imagename eq %a%" /fo list') do if "%%i"=="%a%" echo %a%进程存在&pause&goto :eof
echo %a%进程不存在&pause
---------------------------------------------分割线---------------------------------------------------
回复

使用道具 举报

 楼主| 发表于 2011-12-16 20:34:43 | 显示全部楼层
原帖由 pznpt 于 2011-12-16 02:24 发表
呵呵,本菜鸟只想出本笨法子,试试看看:

---------------------------------------------分割线---------------------------------------------------
@echo off
set a=notepad.exe
for /f "tokens=2" % ...


不行,无论是否有NOTEPAD.EXE 都显示没有运行!还是感谢!
还有什么好的命令啊?
回复

使用道具 举报

发表于 2011-12-16 22:15:50 | 显示全部楼层
原帖由 dreamneo 于 2011-12-16 20:34 发表


不行,无论是否有NOTEPAD.EXE 都显示没有运行!还是感谢!
还有什么好的命令啊?

我怎么试了可以呢?
回复

使用道具 举报

发表于 2011-12-16 23:10:41 | 显示全部楼层
原帖由 dreamneo 于 2011-12-16 20:34 发表


不行,无论是否有NOTEPAD.EXE 都显示没有运行!还是感谢!
还有什么好的命令啊?


有可能你的记事本NOTEPAD.EXE是大写?试了下,用errorlevel可以,这样貌似没问题了

@echo off
set a=notepad.exe
tasklist |find /i "%a%">nul
if errorlevel 1 (echo %a%进程不存在) else echo %a%进程存在
pause
回复

使用道具 举报

发表于 2011-12-17 13:23:42 | 显示全部楼层
原帖由 dreamneo 于 2011-12-15 21:32 发表
假设要查看是否有notepad.exe进程存在,是不用
tasklist /fi "imagename eq notepad.exe"
我用if的errorlevel不行,应该怎么写啊?


批处理的 ERRORLEVEL  有一套完整的机制,  一般就是能取得完整的 errorlevel  值的.

但在不合理使用 set 命令call 命令.  合 >&; <&  这两个重定向符时是很容易得到错误的值的.(这两个重定向符一般用得比较少.)

同时批处理提供了, "|" ;"&&"; "||"  三个管道符  它们分别代表 继承; 成功值传剃;  非零值传剃(它通常是我们所说的错误传剃,但如果持行程序存在多号句柄,一样是此参数传剃.)

建议程序参数无多号句柄时,用上面的三个管道符
[曾经我也在无忧遇到过有个人说"||",不是管道符,
  在我的理解"在一整条语句中,它启着'承前启后'的作用, 它就是管道符"
]

套用楼上的代码.
原帖由 pznpt 于 2011-12-16 23:10 发表
@echo off
set a=notepad.exe
tasklist |find /i "%a%">nul
if errorlevel 1 (echo %a%进程不存在) else echo %a%进 ...


  1. set a=notepad.exe
  2. tasklist |find /i "%a%">nul&&echo. %a% 进程存在||echo.%a% 存在.
复制代码


最后提一句:  以上三个管道符的 如果应用于语句块的 变量, 请注意思变量延时问题.(如:for 语句的DO语句块部分)
回复

使用道具 举报

发表于 2011-12-17 13:48:07 | 显示全部楼层

回复 #6 x9tian 的帖子

谢谢分享,学习了。。。
  1. @echo off
  2. color 0a
  3. set a=notepad.exe
  4. tasklist | find /i "%a%">nul && echo. && echo. %a% 进程存在 && pause>nul || echo. && echo.%a% 进程不存在. && pause>nul
复制代码

[ 本帖最后由 zhs1997 于 2011-12-17 13:51 编辑 ]

打开记事本,运行bat效果

打开记事本,运行bat效果

没有打开记事本,运行bat效果

没有打开记事本,运行bat效果
回复

使用道具 举报

 楼主| 发表于 2011-12-18 22:47:23 | 显示全部楼层
谢谢大家,但是我开始这么写,为什么不行,FIND命令的errorlevel  不是 0 是代表执行正确并找到至少一项,1不是代表执行正确没有找到符合的项吗?


我代码这样写 有什么问题?

@echo off
tasklist|find /i "notepad.exe" >nul
if errorlevel 0 echo 存在
if errorlevel 1 echo 不存在
pause


这样执行的结果 是 有NOTEPAD.EXE存在的时候,显示存在;NOTEPAD.EXE不存在的时候,显示 存在 不存在
这事怎么回事,为什么两个都显示了

难道不存在的时候会同事判断成 0  和 1?

[ 本帖最后由 dreamneo 于 2011-12-18 23:42 编辑 ]

不存在的运行结果

不存在的运行结果
回复

使用道具 举报

发表于 2011-12-19 00:56:14 | 显示全部楼层
貌似 if errorlevel 0 的意思是%errorlevel%大于等于0吧,我也不确定。这样改就对:

if %errorlevel%==0 echo 存在
if %errorlevel%==1 echo 不存在

[ 本帖最后由 pznpt 于 2011-12-19 01:13 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2011-12-19 09:28:30 | 显示全部楼层

回复 #9 pznpt 的帖子

谢谢高手指点,自己继续学习,感谢!
回复

使用道具 举报

发表于 2012-1-23 11:28:38 | 显示全部楼层


  1. @echo off
  2. set y= & set caption=notepad.exe
  3. for /f "skip=1 delims=" %%c in ('wmic process where "caption='%caption%'" get processID 2^>nul') do (set y=1)
  4. if %y%*==1*  (echo %caption% 进程存在! ) else (echo %caption% 进程不存在!)
  5. pause

复制代码

[ 本帖最后由 dos时代菜鸟 于 2012-1-23 11:50 编辑 ]
回复

使用道具 举报

发表于 2012-2-4 22:42:59 | 显示全部楼层
学习一下!!!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1|闽公网安备35020302032614号 )

GMT+8, 2026-5-15 01:06

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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