Что не так с этим кодом?
IF "%language%" == "de" (
goto languageDE
) ELSE (
IF "%language%" == "en" (
goto languageEN
) ELSE (
echo Not found.
)
Я не очень хорош в Batch..
Что не так с этим кодом?
IF "%language%" == "de" (
goto languageDE
) ELSE (
IF "%language%" == "en" (
goto languageEN
) ELSE (
echo Not found.
)
Я не очень хорош в Batch..
@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
.
@echo off
set "language=de"
IF "%language%" == "de" (
goto languageDE
) ELSE (
IF "%language%" == "en" (
goto languageEN
) ELSE (
echo Not found.
)
)
:languageEN
:languageDE
echo %language%
Это работает, но не уверен, как определяется ваша языковая переменная. У нее есть пробелы в определении.
batchfiles выполняет простую замену строк с помощью переменных. поэтому простой
goto :language%language%
echo notfound
...
делает это без необходимости, если.
Рекомендация. Не используйте пользовательские инструкции 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
@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)