Как правильно ограничить команду IF в командном файле? - PullRequest
0 голосов
/ 20 января 2019

Я пытаюсь создать небольшой командный файл, который запускает данную команду, используя операторы IF, основываясь на пользовательском вводе. 5-й вариант запускает несколько команд, поэтому, чтобы сохранить его в чистоте, я ограничился скобками и поместил его в несколько строк.

Тем не менее, я не могу понять правильный синтаксис, чтобы убедиться, что он запускает только эту опцию, когда она выбрана пользователем. Независимо от того, какую опцию вы выберете, она все равно будет запускать строки внутри круглых скобок опции 5. Хуже того, выбор любой из опций после 5 (так, опции 6-9) заставит вас вводить что-то, чтобы удовлетворить ввод, который он ожидает до того, как фактически выполнить выбранную вами опцию.

Очевидно, что я делаю что-то не так, и программа следует этой команде, несмотря ни на что. Я прошу прощения за невероятно нудистский вопрос, но я искал в Интернете и пробовал кучу различных команд и способов форматирования в течение некоторого времени. Буду вечно благодарен, если кто-нибудь скажет мне, где я иду не так, заранее спасибо!

@echo off
cd /d "%~p1"
title Crispy Doom Game Selector
:home
cls
echo.
echo Select Your Game:
echo =================
echo.
echo 1) Ultimate Doom
echo 2) Doom II
echo 3) TNT: Evilution
echo 4) The Plutonia Experiment
echo 5) Master Levels
echo 6) Heretic
echo 7) Chex Quest
echo 8) HacX
echo 9) Exit
echo.
set /p web=Type Number Of Game:
if "%web%"=="1" start crispy-doom.exe -iwad doom\doom.wad -savedir doom\
if "%web%"=="2" start crispy-doom.exe -iwad doom2\doom2.wad -savedir doom2\
if "%web%"=="3" start crispy-doom.exe -iwad doom2\doom2.wad -file doom2\tnt.wad -savedir doom2\
if "%web%"=="4" start crispy-doom.exe -iwad doom2\doom2.wad -file doom2\plutonia.wad -savedir doom2\
if "%web%"=="5" then do (
    echo Which Level?
    dir /s master\
    set /p master=Type Level Name (Without .WAD Extension):
    start crispy-doom.exe -iwad doom2\doom2.wad -file master\%master%.wad -savedir doom2\
)
if "%web%"=="6" start crispy-doom.exe -iwad heretic\heretic.wad -file -savedir heretic\
if "%web%"=="7" start crispy-doom.exe -iwad chex\chex.wad -savedir chex\
if "%web%"=="8" start crispy-doom.exe -iwad hacx\hacx.wad -savedir hacx\
if "%web%"=="9" exit
exit

1 Ответ

0 голосов
/ 20 января 2019

Мне удалось найти решение, которое работает с помощью команд помощи, перечисленных здесь. Возможно, это можно было бы сделать лучше, но мне, по крайней мере, удалось заставить его работать так, как я хочу, вместо этого ссылаясь на программу, содержащую переменную. Однако он все равно будет запускаться до тех пор, пока я не добавлю команду 'exit' между списком параметров и переменной для варианта 5. Таким образом, он выйдет из программы, прежде чем появится возможность ее запустить, или пропустит ее до запустите переменную, если выбрана опция 5. Я даже добавил опцию «отменить» и вернуться к первоначальному списку вариантов. Спасибо всем за предложения!

@echo off
cd /d "%~p1"
title Crispy Doom Game Selector
:MENU
cls
echo.
echo Select Your Game:
echo =================
echo.
echo 1) Ultimate Doom
echo 2) Doom II
echo 3) TNT: Evilution
echo 4) The Plutonia Experiment
echo 5) Master Levels
echo 6) Heretic
echo 7) Chex Quest
echo 8) HacX
echo 9) Exit
echo.
set /p web=Type Number Of Game:
if %web%==1 start crispy-doom.exe -iwad doom\doom.wad -savedir doom\
if %web%==2 start crispy-doom.exe -iwad doom2\doom2.wad -savedir doom2\
if %web%==3 start crispy-doom.exe -iwad doom2\doom2.wad -file doom2\tnt.wad -savedir doom2\
if %web%==4 start crispy-doom.exe -iwad doom2\doom2.wad -file doom2\plutonia.wad -savedir doom2\
if %web%==5 goto MASTER
if %web%==6 start crispy-doom.exe -iwad heretic\heretic.wad -file -savedir heretic\
if %web%==7 start crispy-doom.exe -iwad chex\chex.wad -savedir chex\
if %web%==8 start crispy-doom.exe -iwad hacx\hacx.wad -savedir hacx\
if %web%==9 exit
exit
:MASTER
echo Which Level?
dir /s master\
set /p master=Type Level Name (Without .WAD Extension), or C to cancel:
if %master%==C goto MENU
start crispy-doom.exe -iwad doom2\doom2.wad -file master\%master%.wad -savedir doom2\
...