无忧启动论坛

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

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

[复制链接]
跳转到指定楼层
1#
发表于 2011-12-15 21:32:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
假设要查看是否有notepad.exe进程存在,是不用
tasklist /fi "imagename eq notepad.exe"
我用if的errorlevel不行,应该怎么写啊?

[ 本帖最后由 dreamneo 于 2011-12-19 09:30 编辑 ]
2#
发表于 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
---------------------------------------------分割线---------------------------------------------------
回复

使用道具 举报

3#
 楼主| 发表于 2011-12-16 20:34:43 | 只看该作者
原帖由 pznpt 于 2011-12-16 02:24 发表
呵呵,本菜鸟只想出本笨法子,试试看看:

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


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

使用道具 举报

4#
发表于 2011-12-16 22:15:50 | 只看该作者
原帖由 dreamneo 于 2011-12-16 20:34 发表


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

我怎么试了可以呢?
回复

使用道具 举报

5#
发表于 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
回复

使用道具 举报

6#
发表于 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语句块部分)
回复

使用道具 举报

7#
发表于 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 编辑 ]

0.JPG (16.69 KB, 下载次数: 65)

打开记事本,运行bat效果

打开记事本,运行bat效果

1.JPG (16.8 KB, 下载次数: 73)

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

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

使用道具 举报

8#
 楼主| 发表于 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 编辑 ]

no.jpg (7.68 KB, 下载次数: 86)

不存在的运行结果

不存在的运行结果
回复

使用道具 举报

9#
发表于 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 编辑 ]
回复

使用道具 举报

10#
 楼主| 发表于 2011-12-19 09:28:30 | 只看该作者

回复 #9 pznpt 的帖子

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

使用道具 举报

11#
发表于 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 编辑 ]
回复

使用道具 举报

12#
发表于 2012-2-4 22:42:59 | 只看该作者
学习一下!!!!!
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-12-1 05:20

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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