在一个batch file里面,我怎么知道一个进程是否正在运行?

我想编写一个batch file,检查一个进程是否正在运行,如果是,则执行一个操作,如果没有则执行另一个操作。

我知道我可以使用任务列表来列出所有正在运行的进程,但有没有一种更简单的方法来直接检查特定的进程?

这似乎应该工作,但它不:

tasklist /fi "imagename eq firefox.exe" /hn | MyTask IF %MyTask%=="" GOTO DO_NOTHING 'do something here :DO_NOTHING 

使用atzz提供的解决scheme,这是一个完整的工作演示:

编辑:简化,并修改在WinXP和Vista下工作

 echo off set process_1="firefox.exe" set process_2="iexplore.exe" set ignore_result=INFO: for /f "usebackq" %%A in (`tasklist /nh /fi "imagename eq %process_1%"`) do if not %%A==%ignore_result% Exit for /f "usebackq" %%B in (`tasklist /nh /fi "imagename eq %process_2%"`) do if not %%B==%ignore_result% Exit start "C:\Program Files\Internet Explorer\iexplore.exe" www.google.com 

您可以使用“for / f”构造来分析程序输出。

 set running=0 for /f "usebackq" %%T in (`tasklist /nh /fi "imagename eq firefox.exe"`) do set running=1 

另外,坚持一个是个好主意

 setlocal EnableExtensions 

在你的脚本开始,以防万一,如果用户默认情况下禁用它。

一些选项:

  • 微软的PsList

http://www.windowsdevcenter.com/pub/a/oreilly/windows/news/win2kcommands_0401.html#ps

  • Cygwin(for ps)
  • 资源工具包(对于ps.vbs)

http://www.windowsdevcenter.com/pub/a/oreilly/windows/news/win2kcommands_0401.html#ps

  • Powershell获取进程。