批 - 如果,ElseIf,Else

问题描述 投票:16回答:5

这段代码有什么问题?

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

我不是很擅长批量..

batch-file if-statement
5个回答
30
投票
@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或文件结束。它没有sections控制流量的概念。

因此,进入de将跳转到:languagede然后继续执行指令直到文件结束,显示de然后en然后not found


12
投票
@echo off

set "language=de"

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

:languageEN
:languageDE

echo %language%

这可行,但不确定您的语言变量是如何定义的。它的定义中是否有空格。


7
投票

batchfiles使用变量执行简单的字符串替换。所以,简单

goto :language%language%
echo notfound
...

这样做没有任何需要if。


0
投票

建议。不要使用用户添加的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
投票
@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)
© www.soinside.com 2019 - 2024. All rights reserved.