2013-06-26 36 views
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 [email protected]_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 
) 
+0

它看起來像錯誤輸出將被打印*除*之外的任何*輸入。它真的只顯示大於2嗎? – Jon

+0

你是對的,它只適用於6.錯誤顯示給其他人。我該如何做到這一點(沒有複製+粘貼每個選項下的最後一行,從而使代碼看起來很亂),以便錯誤返回任何不在選項中的數字。我使用了可以工作的「gtr」函數,但我更喜歡它動態地獲取數字,而不是自己設置它們。 –

回答

2

的問題是,你身邊%version%所作的「switch語句」始終貫穿if not "%version%"==""去(當選項6選擇除外),所以錯誤被打印。

這意味着有兩件事情可以做:

  1. 確保如果一個有效的選項已被選定
  2. 確保條件不會是真的不執行有問題的代碼

我建議通過在您的每個開關盒的末端編寫goto :eof來開始第一種方法:

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

這樣就很清楚代碼如何流動,當然,如果有理由,您可以使用另一個標籤跳轉。

+0

奇妙的東西,謝謝。 –

+1

@downvoter:請發表評論,幫助我改進此答案。 – Jon

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!" 
)