我目前正在阅读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
答案 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行。