如何通过批处理脚本检查进程是否正在运行

我如何检查应用程序是否从批处理(well cmd)文件运行?

如果程序已经运行,我不需要启动另一个实例。 (我无法将应用程序更改为仅限单一实例。)

此外,该应用程序可以作为任何用户运行。


我使用grep的另一个可能性是:

tasklist /FI "IMAGENAME eq myapp.exe" 2>NUL | find /I /N "myapp.exe">NUL
if "%ERRORLEVEL%"=="0" echo Program is running

它不需要保存一个额外的文件,所以我更喜欢这种方法。


以下是我的工作方式:

tasklist /FI "IMAGENAME eq notepad.exe" /FO CSV > search.log

FOR /F %%A IN (search.log) DO IF %%~zA EQU 0 GOTO end

start notepad.exe

:end

del search.log

如果它尚未运行,上面将打开记事本。

编辑:请注意,这不会找到任务列表中隐藏的应用程序。 这将包括以不同用户身份运行的所有计划任务,因为这些会自动隐藏。


我喜欢Chaosmaster的解决方案! 但是我寻找一个不启动另一个外部程序的解决方案(如find.exe或findstr.exe)。 所以我从Matt Lacey的解决方案中添加了这个想法,该解决方案创建了一个也是可以避免的临时文件。 最后,我可以找到一个相当简单的解决方案,所以我分享它...

SETLOCAL EnableExtensions
set EXE=myprog.exe
FOR /F %%x IN ('tasklist /NH /FI "IMAGENAME eq %EXE%"') DO IF %%x == %EXE% goto FOUND
echo Not running
goto FIN
:FOUND
echo Running
:FIN

这对我很好用...

链接地址: http://www.djcxy.com/p/51179.html

上一篇: How to check if a process is running via a batch script

下一篇: Return to an already open application when a user tries to open a new instance