批处理文件的切换用例

时间:2018-12-18 14:13:33

标签: batch-file switch-statement

我目前正在阅读Elias Bachaalany撰写的“批处理:批处理文件编程的艺术”,并且正在使用一种脚本来演示切换案例的用法,以及如何实现这一点,因为它不是内置的。

无论如何,他使用/创建的一种脚本我一生都无法理解,当您输入3或4时,它如何获得答案。

该脚本在下面,如果您从switch-case.bat检索该脚本,则称为GitHub website

任何人都可以解释一下使用3或4进行switch-case-fallthrough时,即使标签上没有实际书写的情况,答案还是“ fallthrough”?

谢谢您,在解释这一点时将不胜感激。


@echo off

setlocal

set /P N=Enter number:
call :nested-if
echo.
call :switch-case
echo.
call :switch-case-combined
echo.
call :switch-case-fallthrough

goto :eof

:nested-if

echo Nested IFs...

if %N%==1 (
    echo One
) ELSE (
    if %N%==2 (
        echo Two
    ) ELSE (
        if %N%==3 (
            echo Three
        ) ELSE (
            echo Something else
        )
    )
)

echo After IFs
goto :eof

:switch-case

echo Switch/case

:: Call and mask out invalid call targets
call :switch-case-N-%N% 2>nul || (
    :: Default case
    echo Something else
)
goto :switch-case-end

:switch-case-N-1
    echo One
    goto :eof

:switch-case-N-2
    echo Two
    goto :eof

:switch-case-N-3
    echo Three
    goto :eof

:switch-case-end
echo After Switch/case

goto :eof



:switch-case-combined

echo Switch/case combined

:: Call and mask out invalid call targets
call :switch-case-N-%N% 2>nul || (
    :: Default case
    echo Something else
)
goto :switch-case-end

:switch-case-N-1
:switch-case-N-2
    echo One or two
    goto :eof


:switch-case-N-3
:switch-case-N-4
    echo Three or Four
    goto :eof

:switch-case-end
echo After Switch/case combined

goto :eof


:switch-case-fallthrough

echo Switch/case fallthrough

:: Call and mask out invalid call targets
call :switch-case-N-%N% 2>nul || (
    :: Default case
    echo Something else
)
goto :switch-case-end

:switch-case-N-1
    echo One 
    :: Fallsthrough

:switch-case-N-2
    echo Two
    goto :eof

    goto :eof

:switch-case-end
echo After Switch/case fallthrough

goto :eof

1 个答案:

答案 0 :(得分:0)

goto从当前位置向下搜索标签。如果找不到标签,它将继续从脚本顶部搜索。

因此,在switch-case-fallthrough部分中,3在上面的:switch-case-N-3部分中找到了标签Switch/case,并在那里继续。 (您可以通过将第57行的echo Three更改为echo Three [here I am]来证明)

switch-case-fallthrough 4部分中的相同方式到达上方的第86行。