Antworten:
%Labels%
und ein Doppelpunkt werden an den Findstr weitergegeben. Die eingegebene Bezeichnung wird ebenfalls mit einem Doppelpunkt versehen, sodass nur vollständige Bezeichnungen abgeglichen werden.@Echo off&SetLocal EnableExtensions EnableDelayedExpansion
Set "Labels="&For /f %%A in ('findstr /i "^:[a-z]" %0') Do Set "Labels=!Labels!%%A"
:redo
Set "Label="&set /p "Label=Choose label %Labels%:"
if not defined Label goto :Eof
Echo %Labels%:|findstr /i ":%Label::=%:" >nul 2>&1 ||(Echo invalid label %Label% & goto :redo)
goto %Label%
Echo we'll never reach here
:One
Echo Label One
goto :redo
:Two
Echo Label Two
goto :redo
:Three
Echo Label Three
goto :redo
Beispielausgabe:
> SU_1204527.cmd
Choose label :redo:One:Two:Three:one
Label One
Choose label :redo:One:Two:Three:two
Label Two
Choose label :redo:One:Two:Three:blah
invalid label blah
Choose label :redo:One:Two:Three:
>
:Test1 and
: Test2`` und der Benutzer test
die andere Antwort eingibt, schlägt dies fehl - diesmal nicht.