Switch-Case для пакетного файла

В настоящее время я читаю «Батхография: искусство программирования пакетных файлов» Элиаса Бачаалани и использую один из сценариев, демонстрирующих использование переключателя и способы его достижения, поскольку он не встроен.

Во всяком случае, один из сценариев, которые он использует / создал, я не могу понять, как он получает ответы, когда вы вводите 3 или 4.

Сценарий находится ниже и называется переключатель-case.bat, если вы извлекаете его из Сайт GitHub.

Может ли кто-нибудь объяснить, как для switch-case-fallthrough, когда вы используете 3 или 4, ответы «проваливаются», даже если на этикетке действительно не написано case?

Спасибо, очень благодарны за помощь в объяснении этого.


@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
Никогда использовать :label или :: label-like comment внутри командного блока, заключенного в круглые скобки ()
JosefZ 18.12.2018 15:52
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
9 660
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

goto ищет метку с текущей позиции вниз. Если ярлык не найден, поиск продолжается с начала скрипта.

Итак, в разделе switch-case-fallthrough3 находит метку :switch-case-N-3 в разделе Switch/case выше и продолжает там. (это можно проверить, заменив echo Three в строке 57 на echo Three [here I am])

Таким же образом в секции switch-case-dropthrough 4 достигает строки 86 выше.

Другие вопросы по теме