Batch脚本goto跳转异常求助:非PC选项调用时modPackChoice提示异常
批处理脚本调用时意外触发Mod包选择提示的问题分析与解决
问题现象
compile.bat独立运行时:选择PC作为控制台会弹出Mod包选择提示,选择其他控制台则直接跳过该提示进入后续流程,运行正常。- 通过
globalCompile.bat调用时:选择PC选项执行正常,但选择非PC选项时,compile.bat意外弹出Mod包选择提示,不符合预期。
问题原因
核心是调用场景下的执行流程没有跳过Mod包选择逻辑段:
当globalCompile.bat传入非PC的consoleChoice参数时,compile.bat的执行路径如下:
- 接收第一个参数并赋值给
consoleChoice,随后跳转到:consoleChoiceCheck - 由于
consoleChoice不为空,不会进入:consoleChoicePrompt,直接向下执行到:modPackSection - 此时
%~2为空(global仅传入一个参数),modPackChoice被设为空值 - 进入
:modPackChoiceCheck后,判断modPackChoice为空,触发:modPackChoicePrompt弹出选择框
而独立运行时选择非PC,是从:consoleChoicePrompt里直接goto section2,天然跳过了:modPackSection,所以没有问题。
修复方案
在compile.bat的:consoleChoiceCheck阶段,新增判断逻辑:如果控制台不是PC,直接跳转到:section2,跳过Mod包选择逻辑段。
修改后的compile.bat关键代码片段:
@echo off set "consoleChoice=%~1" goto consoleChoiceCheck REM console not selected, main compiler prompt not used, pick console :consoleChoicePrompt CHOICE /C 12345 /M "Which console are you using? " IF ERRORLEVEL 5 SET consoleChoice=XB & goto section2 IF ERRORLEVEL 4 SET consoleChoice=PSP & goto section2 IF ERRORLEVEL 3 SET consoleChoice=PS2 & goto section2 IF ERRORLEVEL 2 SET consoleChoice=GC & goto section2 IF ERRORLEVEL 1 SET consoleChoice=PC & goto modPackSection REM Checks if console was selected from main compiler script/if main compiler script was used :consoleChoiceCheck if "%consoleChoice%"=="" goto consoleChoicePrompt :: 新增:非PC控制台直接跳过Mod包选择逻辑 if not "%consoleChoice%"=="PC" goto section2 :modPackSection REM get mod pack choice from main compiler script set "modPackChoice=%~2" goto modPackChoiceCheck REM mod pack not selected, main compiler prompt not used, pick mod pack :modPackChoicePrompt CHOICE /C 1234 /M "Which Mod Pack are you using? " IF ERRORLEVEL 4 SET modPackChoice=MUE & goto section2 IF ERRORLEVEL 3 SET modPackChoice=BHE & goto section2 IF ERRORLEVEL 2 SET modPackChoice=AXE & goto section2 IF ERRORLEVEL 1 SET modPackChoice=X2UP & goto section2 REM Checks if mod pack was selected from main compiler script/if main compiler script was used :modPackChoiceCheck if "%modPackChoice%"=="" goto modPackChoicePrompt :section2 ...
这样无论独立运行还是被调用,非PC控制台都会直接跳过Mod包选择流程,符合预期。
内容的提问来源于stack exchange,提问作者E. Reed
相关产品推荐
相关产品推荐

