首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.bat用于检查窗口或进程是否已打开或正在运行,如果未执行其他操作,则执行此操作

.bat用于检查窗口或进程是否已打开或正在运行,如果未执行其他操作,则执行此操作
EN

Stack Overflow用户
提问于 2021-06-09 10:23:15
回答 1查看 45关注 0票数 0

我需要一点帮助。

我需要创建一个.bat文件来检查进程是否每隔5秒运行一次。如果进程正在运行,那么它将在5秒内重新设置并再次检查。如果该进程未运行,则会关闭所有其他.bat文件并重新启动所有文件。

这是针对游戏服务器的。所以现在整个过程包括几个.bat文件,它们做了不同的事情。initiate.bat通过启动startserver.bat来启动该进程。然后startserver.bat启动游戏服务器,它的窗口打开,服务器启动,它启动.bat文件schedule.bat,该文件设置计时器,一旦计时器用完就重新启动服务器,然后startserver.bat启动anticrash.bat,其代码如下所示。

我有一种感觉,代码没有找到服务器窗口或进程。我仔细检查了进程文件名,并确保它是正确的。服务器窗口中的标题只是指向.exe的路径,但无论我尝试什么,都无法使其正常工作。它总是在一个循环中结束,并且不能识别打开或关闭的进程,它只是缺省为"Server was not found!“。如果我交换代码,它将简单地循环“发现了服务器!”然后继续往前走。

这也不是我尝试过的唯一示例。我已经查看了我能找到的关于如何检查进程或窗口是否打开的每一篇文章。我已经尝试在窗口中添加一个标题并搜索该标题,我还尝试了其他代码配置和if then语句,但都不起作用。

最后,我希望.bat简单地检查服务器进程是否正在运行,或者窗口是否打开,因为我并不关心它如何识别它,如果服务器窗口是打开的并且服务器正在运行,那么只需每5秒重新检查一次。如果发现进程或窗口已关闭或结束,则应关闭所有其他.bats并重新启动启动服务器的进程。它主要是在服务器崩溃时使用的,如果服务器崩溃了,我希望它重新启动。

代码语言:javascript
复制
@echo off
goto check

:check
cls
echo Starting Anit Crash... Check every 5 Seconds...
SETLOCAL EnableExtensions
set EXE=program.exe
FOR /F %%x IN ('tasklist /NH /FI "IMAGENAME eq %EXE%"') DO IF %%x == %EXE% goto FOUND
echo Server was not found!
echo Server may have crashed...
timeout /t 5
echo Shutting Down Other Processes First...
taskkill /f /im "schedule.bat"
echo Server Restarting...
start cmd /k call initiate.bat
echo Exiting Anti Crash...
timeout /t 3
goto FIN
:FOUND
echo Server Was Found...
echo Server Is Active... Rechecking In 5 Seconds...
timeout /t 5
goto check
:FIN
exit
EN

回答 1

Stack Overflow用户

发布于 2021-06-16 04:02:29

它可能会解决你的问题

代码语言:javascript
复制
@echo off

:values
set EXE=safeincloud.exe

:check
cls
echo Starting Anti Crash... Check every 5 Seconds...
tasklist /fi "ImageName eq %EXE%" /fo csv 2>NUL | find /I "%EXE%">NUL
if "%ERRORLEVEL%"=="0" goto FOUND
echo Server was not found!
echo Server may be crashed...
timeout /t 5 >nul
echo Shutting Down Other Processes First...
taskkill /f /im "schedule.bat"
echo Server Restarting...
start "" "initiate.bat"
echo Exiting Anti Crash...
timeout /t 3 >nul
goto End

:FOUND
echo.
echo Server Was Found...
echo Server Is Active... Rechecking In 5 Seconds...
timeout /t 5 >nul
goto check

:End
exit

来源:How to check if a process is running via a batch script

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67896684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档