我需要一点帮助。
我需要创建一个.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并重新启动启动服务器的进程。它主要是在服务器崩溃时使用的,如果服务器崩溃了,我希望它重新启动。
@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发布于 2021-06-16 04:02:29
它可能会解决你的问题
@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
exithttps://stackoverflow.com/questions/67896684
复制相似问题