【问题标题】:Batch File "if not" error批处理文件“如果不是”错误
【发布时间】:2013-06-26 21:40:00
【问题描述】:

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

但是,当我运行它时,它会执行我希望它执行的操作,但是选项 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 
)

【问题讨论】:

  • 看起来除了6之外的任何输入都会打印错误输出。它真的只显示 > 2 吗?
  • 你是对的,它只适用于6。错误显示为每隔一个。我如何做到这一点(不复制+粘贴每个选项下的最后一行,从而使代码看起来很混乱),以便为不在选项中的任何数字返回错误。我使用了有效的“gtr”函数,但我更希望它动态获取数字而不是自己设置。

标签: windows batch-file cmd directory


【解决方案1】:

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

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

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

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

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

这样一来代码的流程就一目了然了,当然如果有理由也可以用另一个标签跳转。

【讨论】:

  • @downvoter:请留下评论帮助我改进这个答案。
【解决方案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!"
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-12
    • 2018-04-21
    • 2017-10-26
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 2016-02-01
    • 1970-01-01
    相关资源
    最近更新 更多