このコードの何が問題になっていますか?
IF "%language%" == "de" (
goto languageDE
) ELSE (
IF "%language%" == "en" (
goto languageEN
) ELSE (
echo Not found.
)
私はバッチではあまり得意ではありません。
@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
、またはファイルの終わりに達するまで、バッチは単に1行ずつ命令を続行するだけです。フローを制御する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%
これは機能しますが、言語変数がどのように定義されているかはわかりません。定義にスペースが含まれていますか。
バッチファイルは、変数で単純な文字列置換を実行します。だから、シンプルな
goto :language%language%
echo notfound
...
ifを必要とせずにこれを行います。
@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)
勧告。ユーザーが追加した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