You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

批处理脚本需求:检测未运行的Diablo Immortal实例并启动对应启动器

《Diablo Immortal》多实例崩溃自动补启批处理方案

我游玩《Diablo Immortal》时遇到非本地原因导致的崩溃问题,无法通过本地修复解决。我同时运行该游戏的4个实例,当其中某一实例崩溃后,需要自动识别仍在运行的实例,启动对应未运行实例的启动器。我自己拼凑的批处理脚本只能输出运行中的进程及路径,无法实现上述自动补启需求。

现有脚本

SETLOCAL EnableExtensions

set EXE=DiabloImmortal.exe

FOR /F %%x IN ('tasklist /NH /FI "IMAGENAME eq %EXE%"') DO IF %%x == %EXE% goto ProcessFound

goto ProcessNotFound

:ProcessFound
wmic process where "name='%EXE%'" get ProcessID, ExecutablePath

goto END

:ProcessNotFound
echo %EXE% is not running
goto END

:END
echo Finished!

pause

现有脚本输出示例

ExecutablePath                                                                    ProcessId
C:\Program Files (x86)\Diablo Immortal1\Engine\Binaries\Win64\DiabloImmortal.exe  16464
C:\Program Files (x86)\Diablo Immortal2\Engine\Binaries\Win64\DiabloImmortal.exe  15612

需求说明

我拥有4个命名为Diablo Immortal1至Diablo Immortal4的目录,需要脚本检测到未运行的实例(如示例中的3号)时,启动对应目录下的Diablo Immortal Launcher.exe,且每次仅启动一个未运行的实例。


解决方案脚本

@echo off
SETLOCAL EnableExtensions EnableDelayedExpansion

:: 定义游戏主程序和启动器名称
set "EXE=DiabloImmortal.exe"
set "LAUNCHER=Diablo Immortal Launcher.exe"
:: 游戏目录的基础路径
set "BASE_PATH=C:\Program Files (x86)"
:: 实例总数
set "TOTAL_INSTANCES=4"

:: 初始化已运行实例标记:0=未运行,1=已运行
for /L %%i in (1,1,%TOTAL_INSTANCES%) do set "RUNNING_%%i=0"

:: 遍历所有运行中的游戏进程,标记已运行的实例
for /F "skip=1 tokens=*" %%p in ('wmic process where "name='%EXE%'" get ExecutablePath /value') do (
    set "PATH_LINE=%%p"
    :: 从路径中提取实例编号
    echo !PATH_LINE! | findstr /C:"Diablo Immortal" >nul
    if not errorlevel 1 (
        for /F "tokens=3 delims= " %%n in ("!PATH_LINE!") do (
            set "INSTANCE_NUM=%%n"
            set "INSTANCE_NUM=!INSTANCE_NUM:\=!"
            set "RUNNING_!INSTANCE_NUM!=1"
        )
    )
)

:: 按顺序启动第一个未运行的实例
for /L %%i in (1,1,%TOTAL_INSTANCES%) do (
    if !RUNNING_%%i! equ 0 (
        set "LAUNCHER_PATH=%BASE_PATH%\Diablo Immortal%%i\!LAUNCHER!"
        echo 启动实例%%i的启动器: !LAUNCHER_PATH!
        start "" "!LAUNCHER_PATH!"
        goto :END_SCRIPT
    )
)

echo 所有4个实例均已在运行中。

:END_SCRIPT
echo 操作完成!
pause
ENDLOCAL

脚本说明

  • 标记初始化:先给4个实例设置未运行标记,后续检测到运行实例时更新标记状态。
  • 运行实例检测:通过wmic获取进程路径,提取路径中的实例编号,同步更新标记数组。
  • 单实例启动:按顺序遍历标记数组,找到第一个未运行的实例后立即启动对应启动器,启动后退出循环,保证每次只启动一个实例。
  • 延迟变量扩展:启用EnableDelayedExpansion确保循环内变量的读取和修改正常生效。

内容的提问来源于stack exchange,提问作者Josh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 15:01:28