Сначала мы напишем алгоритм:
Get user's age.
If age 16 or older, go do big kid stuff and exit,
else go do little kid stuff and exit.
Пишем, что в коде выглядит примерно так:
@setlocal EnableExtensions
@call :SetAge
@if %_age% GEQ 16 (@call :BigKidStuff) else (@call :LittleKidStuff)
@exit /b
:BigKidStuff
@echo You are old enough... What will you do now?
@exit /b 0
:InstructUser
@echo How old are you? Please enter a number between 0 and 199.
@exit /b 0
:LittleKidStuff
@echo You are not old enough... Leave.
@exit /b 1
:SetAge
:_tryAgain
@call :InstructUser
@set /p _age=
@rem Check for numeric input and age limitations:
@set _inputVerified=0
@for /L %%N in (0,1,199) do @(@if "%%N" EQU "%_age%" @set _inputVerified=1)
@if not %_inputVerified% EQU 1 (@goto :_tryAgain)
@rem If we get this far, we have valid input between in the 0..199 range.
@exit /b 0
ПРИМЕЧАНИЕ: я не проводил много испытаний по этому вопросу, но я думаю, что охватывает все пути кода по крайней мере один раз. Попробуйте.
См. help setlocal
, help for
, help call
, help goto
, help if
и help exit
, чтобы узнать больше о приведенном выше коде.
Stylisti c примечания:
- Я использую символы
@
повсюду, а не @echo off
, потому что он более совместим с другими сценариями и облегчает целевую отладку. - Я использую другой стиль имен меток для
goto
целей, чем call
целей. - Я избегаю использования многострочных кодовых блоков (более одной строки между паренами), таких как чума .