Пакет - если, ElseIf, Else

Что не так с этим кодом?

IF "%language%" == "de" (
    goto languageDE
) ELSE (
    IF "%language%" == "en" (
    goto languageEN
) ELSE (
    echo Not found.
)

Я не очень хорош в Batch..

Ответ 1

@echo off
title Test

echo Select a language. (de/en)
set /p language=

IF /i "%language%"=="de" goto languageDE
IF /i "%language%"=="en" goto languageEN

echo Not found.
goto commonexit

:languageDE
echo German
goto commonexit

:languageEN
echo English
goto commonexit

:commonexit
pause

Дело в том, что пакет просто продолжает выполнять инструкции, строка за строкой, пока не достигнет goto, exit или конца файла. У него нет понятия sections для управления потоком.

Следовательно, ввод de приведет к переходу на :languagede затем просто продолжит выполнение инструкций, пока файл не завершится, показывая de затем en затем not found.

Ответ 2

@echo off

set "language=de"

IF "%language%" == "de" (
    goto languageDE
) ELSE (
    IF "%language%" == "en" (
        goto languageEN
    ) ELSE (
    echo Not found.
    )
)

:languageEN
:languageDE

echo %language%

Это работает, но не уверен, как определяется ваша языковая переменная. У нее есть пробелы в определении.

Ответ 3

batchfiles выполняет простую замену строк с помощью переменных. поэтому простой

goto :language%language%
echo notfound
...

делает это без необходимости, если.

Ответ 4

Рекомендация. Не используйте пользовательские инструкции REM для блокировки шагов пакета. Вместо этого используйте условный GOTO. Таким образом, вы можете предопределить и протестировать этапы и параметры. Пользователи также получают гораздо более простые изменения и большую уверенность.

@Echo on
rem Using flags to control command execution

SET ExecuteSection1=0
SET ExecuteSection2=1

@echo off

IF %ExecuteSection1%==0 GOTO EndSection1
ECHO Section 1 Here

:EndSection1

IF %ExecuteSection2%==0 GOTO EndSection2
ECHO Section 2 Here
:EndSection2

Ответ 5

@echo off
color 0a
set /p language=
if %language% == DE (
    goto LGDE
) else (
    if %language% == EN (
    goto LGEN
    ) else (
    echo N/A
)

:LGDE
(code)
:LGEN
(code)