Показать полную графическую версию : Проверка на определенный символ при вводе
Mr.Merak
28-07-2016, 08:22
Всем привет.
Подскажите как словить ввод определенного символа. Т.е. если ввели 1 - сделали одно, если 2 - другое, а если добавить символ n к любому из параметров - выполнить третье (например 2a)
Set /p choice="Enter: "
if "%choice%"=="1" ...
if "%choice%"=="2" ...
if "%choice%"==...Спасибо.
megaloman
28-07-2016, 13:36
@echo off
cls
Set /p choice="Enter: "
if "%choice%"=="1" Call :Sub1
if "%choice%"=="2" Call :Sub2
if "%choice:~0,1%"=="1" If Not "%choice%"=="1" Call :Sub3
if "%choice:~0,1%"=="2" If Not "%choice%"=="2" Call :Sub3
pause
GoTo :Eof
:Sub1
Echo kuku1
GoTo :Eof
:Sub2
Echo kuku2
GoTo :Eof
:Sub3
Echo kuku3
GoTo :Eof
Mr.Merak
28-07-2016, 14:37
if "%choice:~0,1%"=="1" If Not "%choice%"=="1" Call :Sub3 »
это получается если я введу что угодно начинающееся на 1 или 2 (например, 22222222222222) то выполняется п.3
спасибо за совет, но это чутка не то... у меня там просто очень много вариант ответа и мне нужно, чтоб если к любому из них добавить какой то символ, например 122a то выполнить соотв. команду
Mr.Merak, получается, что«1a», «2a», «3a» должны выполнять одну и ту же процедуру?
Mr.Merak
28-07-2016, 18:55
Iska, да!
ввели 1 - выполнили процедуру 1
ввели 2 - выполнили процедуру 2
ввели 3 - выполнили процедуру 3
НО если к любому из вариантов добавить символ "a", например 1а или 2а - выполнили процедуру 4
Mr.Merak,
Ну если в параметре будет 1a, то так все равно будет выполняться именно вариант для a:
@echo off
Set /p choice="Enter: "
if "%choice%"=="1" Call :Sub1
if "%choice%"=="2" Call :Sub2
if "%choice%"=="1a" Call :Sub3
if "%choice%"=="2a" Call :Sub3
>nul pause& exit
:Sub1
echo 1
exit/b
:Sub2
echo 2
exit/b
:Sub3
echo 1a/2a
exit/b
НО если к любому из вариантов добавить символ "a", например 1а или 2а - выполнили процедуру 4 »
Mr.Merak, тогда я не вижу ни смысла, ни логики в Вашем алгоритме. Пусть вводят просто «a», зачем тогда тут перед ним нужно число, если оно ни на что не влияет?!
megaloman
28-07-2016, 22:20
Mr.Merak, Ну Вы на ходу постановку меняете. Вот общее решение: задаём массив возможных ответов и соответственно ему массив номеров действий (вызываемых процедур). При большом количестве возможных ответов это проще, чем писать кучу If@echo off
cls
Set "TAns=1 2 3 1a 2a 3b"
Set "NAns=1 2 3 4 4 3"
SetLocal EnableDelayedExpansion
Set /p choice="Enter: "
Call :NSub "%choice%" "N"
If %N% NEQ 0 (Call :Sub%N%) Else (Echo Answer %choice% not correct)
Pause
GoTo :Eof
:NSub
Set /A %~2=0
FOR %%i IN (%TAns%) DO (
Set /A %~2+=1
If /I "%%i"==%1 GoTo :Continue
)
Set /A %~2=0
GoTo :Eof
:Continue
Set /A ii=0
FOR %%i IN (%NAns%) DO (
Set /A ii+=1
If /I !ii! EQU !%~2! (Set /A %~2=%%i & GoTo :Eof)
)
Set /A %~2=0
GoTo :Eof
:Sub1
Echo kuku1
GoTo :Eof
:Sub2
Echo kuku2
GoTo :Eof
:Sub3
Echo kuku3
GoTo :Eof
:Sub4
Echo kuku4
GoTo :Eof
Mr.Merak
29-07-2016, 08:46
megaloman, да это оно! Спасибо!
на ходу вроде ничего не менял, сори, мож просто нормально не смог объяснить...
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.