@echo off
:loop
set /p "userinput=Input: "
echo %userinput%|findstr /r "^[0-9][0-9][0-9][0-9][0-9][0-9]$" >nul || (
echo invalid input
goto :loop
)
set "nofives=%userinput:5=%0123456"
set /a fives=%nofives:~6,1%
echo %userinput% has %fives% fives.
if %fives% == 3 goto :three
goto :loop
:three
echo insert your payload here
findstr
проверяет, содержит ли вход ровно 6 цифр.
set nofives...
удаляет любые 5
и добавляет строку счетчика
%nofives:~6,1%
, получаетседьмой символ (отсчет начинается с нуля!), то есть число пятерок.
Поскольку это эффективно подсчитывает число пятерок (расширяемое до ввода максимум девяти чисел 1) ), вы можете обрабатывать "ровно три" (if %fives% == 3
) или «минимум три» (if %fives% geq 3
) или что угодно.
Чтобы показать, как это работает, давайте предположим, что %userinput%
равно abcdef
(только чтобы не путать его со строкой счетчика)Если мы ничего не удалим из %userinput%
и добавим строку счетчика, это будет выглядеть так:
abcdef0123456
^ this char is the count (seventh char)
Если мы удалим один символ (abcdef -> abcdf) и добавим строку счетчика, это будет выглядеть так:
abcdf0123456
^ this char is the count (seventh char)
и так далее до тех пор, пока «не удалите шесть символов (для вас это будет пользовательский ввод 555555
). Тогда это выглядит так:
0123456
^ this char is the count (seventh char)
1) с двумя небольшими изменениями, расширяемыми до 15 чисел (с использованием шестнадцатеричной строки счетчика):
set "nofives=%userinput:5=%0123456789ABCDEF"
set /a fives=0x%nofives:~6,1%