web-dev-qa-db-fra.com

Lot - If, ElseIf, Else

Quel est le problème avec ce code?

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

Je ne suis pas vraiment bon dans le lot ..

16
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

Le fait est que ce lot continue simplement à travers les instructions, ligne par ligne, jusqu'à atteindre goto, exit ou fin du fichier. Il n’a pas de cencept de sections pour contrôler le flux.

Par conséquent, entrer de ferait sauter à :languagede, puis continuerait simplement à exécuter les instructions jusqu'à la fin du fichier, affichant de puis en puis not found.

24
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%

Cela fonctionne, mais vous ne savez pas comment votre variable de langue est définie. La définition comporte-t-elle des espaces.

11
npocmaka

batchfiles effectue une simple substitution de chaîne avec des variables .

goto :language%language%
echo notfound
...

fait cela sans avoir besoin de si.

6
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)
0

Recommandation. N'utilisez pas d'instructions REM ajoutées par l'utilisateur pour bloquer les étapes de traitement par lots. Utilisez GOTO conditionnel à la place de… .. Ainsi, vous pourrez prédéfinir et tester les étapes et les options. Les utilisateurs obtiennent également des modifications beaucoup plus simples et une meilleure confiance.

@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