1

因此,我使用多个选项进行了批处理文件编辑,我正在尝试对其进行编辑,以便如果选择了不在文件中的数字,它将返回错误。

但是,当我运行它时,它会执行我希望它执行的操作,但选项 2 以上的任何操作都会返回错误回显。

@echo off

title Multi-Game Launcher

set ARMA3_PATH=C:\Program Files\Steam\SteamApps\common\Arma 3
set ARMA2_PATH=E:\Games\Retail Games\Bohemia Interactive\ArmA 2
set ARMA2OA_PATH=E:\Games\Retail Games\Bohemia Interactive\ArmA 2
set TAKEONH_PATH=E:\Games\Retail Games\Bohemia Interactive\Take On Helicopters

:home
cls

echo.
echo Select a version:
echo =================
echo.
echo Which version would you like to run?
echo 1 - ArmA 2 ACE/ACRE
echo 2 - ArmA 2 DayZ
echo 3 - ArmA 2 I44
echo 4 - ArmA 3 AIA
echo 5 - ArmA 2 DayZ Chernarus Server
echo 6 - Exit

set /p version=Pick Version:

if %version%==1 (
    set CUSTOM_MODS=expansion\beta;expansion\beta\expansion;
    set DEFAULT_PARAMETERS=
    cd /D "%ARMA2OA_PATH%"
    start expansion\beta\arma2oa.exe %DEFAULT_PARAMETERS% "-mod=%CUSTOM_MODS%"
)

if  %version%==2 (
    set CUSTOM_MODS=expansion\beta;expansion\beta\expansion;@DayZ;BAF;PMC;ACR
    set DEFAULT_PARAMETERS=-noSplash -noFilePatching -winxp
    cd /D "%ARMA2OA_PATH%"
    start expansion\beta\arma2oa.exe %DEFAULT_PARAMETERS% "-mod=%CUSTOM_MODS%"
) 

if  %version%==3 (
    set CUSTOM_MODS=expansion\beta;expansion\beta\expansion;@I44;BAF;PMC;ACR
    set DEFAULT_PARAMETERS=-noSplash -noFilePatching -winxp
    cd /D "%ARMA2OA_PATH%"
    start expansion\beta\arma2oa.exe %DEFAULT_PARAMETERS% "-mod=%CUSTOM_MODS%"
) 

if  %version%==4 (
    set CUSTOM_MODS=@CBA_A3;@vts_weaponresting;@cal68
    set DEFAULT_PARAMETERS=
    cd /D "%ARMA3_PATH%"
    start arma3.exe %DEFAULT_PARAMETERS% "-mod=%CUSTOM_MODS%;@AllInArma\ProductDummies;%ARMA2_PATH%;%ARMA2OA_PATH%;%ARMA2OA_PATH%\Expansion;%TAKEONH_PATH%;@A1A2ObjectMerge;%ARMA3_PATH%;@AllInArma\Core;@AllInArma\PostA3"
)

if  %version%==5 (
    set CUSTOM_MODS=expansion\beta;expansion\beta\expansion;@DayZ;@reality_1.chernarus
    set DEFAULT_PARAMETERS= -BEPath=%INFO_PATH%\BattlEye -config=%INFO_PATH%\config.cfg -Profiles=%INFO_PATH% -cfg=%INFO_PATH%\basic.cfg
    cd /D "%ARMA2OA_PATH%"
    start expansion\beta\arma2oaserver.exe %DEFAULT_PARAMETERS% "-mod=%CUSTOM_MODS%"
)

if  %version%==6 (
    exit
)

if not "%version%"=="" (
echo Invalid Selection 
pause 
goto home 
)
4

2 回答 2

2

在您需要的代码块内delayed expansion

SETLOCAL ENABLEDELAYEDEXPANSION 
if %version%==1 (
     set CUSTOM_MODS=expansion\beta;expansion\beta\expansion;
     set DEFAULT_PARAMETERS=
     cd /D "%ARMA2OA_PATH%"
     start expansion\beta\arma2oa.exe !DEFAULT_PARAMETERS! "-mod=!CUSTOM_MODS!"
)
于 2013-06-26T21:49:11.277 回答
2

问题是您所做的“切换语句”%version%总是通过if not "%version%"==""(选择选项 6 时除外),因此会打印错误。

这意味着您可以做两件事:

  1. 如果选择了有效选项,请确保不执行违规代码
  2. 确保条件不成立

我建议goto :eof在每个 switch 案例的末尾写下第一种方式:

if %version%==1 (
    rem ...stuf....
    goto :eof
)

这样一来代码如何流动就很清楚了,当然如果有理由你可以使用另一个标签来跳转。

于 2013-06-26T21:51:28.177 回答