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 ..
@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
.
@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.
batchfiles effectue une simple substitution de chaîne avec des variables .
goto :language%language%
echo notfound
...
fait cela sans avoir besoin de si.
@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)
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