web-dev-qa-db-ja.com

バッチ-If、ElseIf、Else

このコードの何が問題になっていますか?

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

私はバッチではあまり得意ではありません。

18
Underbytex
@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

ポイントは、gotoexit、またはファイルの終わりに達するまで、バッチは単に1行ずつ命令を続行するだけです。フローを制御するsectionsの概念はありません。

したがって、deと入力すると、:languagedeにジャンプしてから、ファイルが終了するまで命令の実行を続け、deen、_not foundの順に表示します。

31
Magoo
@echo off

set "language=de"

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

:languageEN
:languageDE

echo %language%

これは機能しますが、言語変数がどのように定義されているかはわかりません。定義にスペースが含まれていますか。

12
npocmaka

バッチファイルは、変数で単純な文字列置換を実行します。だから、シンプルな

goto :language%language%
echo notfound
...

ifを必要とせずにこれを行います。

7
ths
@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
0
WaitForPete