Steam批处理脚本执行中断:启动游戏后无法运行后续代码
为啥启动Path of Exile后,批处理的后续代码不执行了?
嘿,这个问题我太熟了——核心原因就是批处理的阻塞执行机制在搞鬼!
当你直接在批处理里调用Steam或者游戏的启动命令时,批处理会进入“等待模式”:它会死死盯着你启动的这个进程(不管是Steam客户端还是Path of Exile游戏),直到这个进程完全关闭,才会继续往下执行后面的echo ASDF代码。而Path of Exile是个长时间运行的游戏,只要你不关掉它,批处理就会一直卡在启动游戏的那一行,根本轮不到执行后续指令。
怎么解决?用start命令异步启动就行!
批处理里的start命令专门用来异步启动程序——它会把目标进程丢到后台运行,批处理本身不会等它结束,直接继续执行后面的代码。给你两种适配你需求的写法:
写法1:直接通过Steam协议启动游戏
Steam支持用steam://rungameid/[游戏ID]的协议快速启动游戏,Path of Exile的游戏ID是238960,脚本可以这么写:
:: 异步启动Path of Exile,空引号是窗口标题占位(必须加) start "" "steam://rungameid/238960" echo ASDF
这里的""是start命令要求的窗口标题参数,哪怕你不需要标题也得留着,否则如果路径/协议里有空格,start会识别出错。
写法2:先启动Steam(未运行时)再启动游戏
如果需要先检查并启动Steam,再开游戏,也可以用start异步处理:
:: 检查Steam是否在运行,没运行就启动它 tasklist /FI "IMAGENAME eq steam.exe" 2>NUL | find /I /N "steam.exe">NUL if "%ERRORLEVEL%"=="1" start "" "C:\Program Files (x86)\Steam\Steam.exe" :: 异步启动Path of Exile start "" "steam://rungameid/238960" echo ASDF
补充说明
你之前的脚本应该是直接写了类似"C:\Program Files (x86)\Steam\Steam.exe" -applaunch 238960的命令,没有加start——这种写法就是阻塞式的,批处理会等Steam和游戏全关掉才继续。加上start之后,就把这个进程变成后台运行,批处理就能顺利执行后续的echo ASDF了。
内容的提问来源于stack exchange,提问作者Mate de Vita




