Войти

Показать полную графическую версию : [решено] Оператор IF несколько условий


epoddubniy
24-07-2021, 13:48
Здравствуйте.
Помогите пожалуйста. Нужно, чтобы, переходило к соответствующей метке перехода

в этом выражении какая-то ошибка. Его суть, если не выполняется ни одно из предыдущих условий, то....
if (("%virazhenie%" neq "stroka1") & ("%virazhenie%" neq "stroka2") & ("%virazhenie%" neq "stroka3")) goto NetSovpadeniy

Непосредственно, код бадника

set /p virazhenie=

if "%virazhenie%"=="stroka1" goto stroka1
if "%virazhenie%"=="stroka2" goto stroka2
if "%virazhenie%"=="stroka3" goto stroka3
if (("%virazhenie%" neq "stroka1") & ("%virazhenie%" neq "stroka2") & ("%virazhenie%" neq "stroka3")) goto NetSovpadeniy
pause

:stroka1
echo stroka1
pause

:stroka2
echo stroka2
pause

:stoka3
echo stroka3
pause

:NetSovpadeniy
echo NetSovpadeniy
pause

NickM
24-07-2021, 14:45
если не выполняется ни одно из предыдущих условий, то.... »
Так Вы уже выше все эти условия проверили, тогда зачем ещё одно условие создавать?
Сразу переходите по указателю
:NetSovpadeniy

megaloman
24-07-2021, 16:10
epoddubniy, несколько If через & ИМХО не аналогичен and из других языков программирования и работать не будет. И, ИМХО, массированное применение GoTo потом очень затрудняет чтение и отладку кода. Удобнее использовать псевдопроцедуры.@Echo Off
cls
set /p virazhenie=Input stroka# ^>
if "%virazhenie%" neq "stroka1" If "%virazhenie%" neq "stroka2" If "%virazhenie%" neq "stroka3" Call :NetSovpadeniy &Exit /B

if "%virazhenie%"=="stroka1" Call :stroka1
if "%virazhenie%"=="stroka2" Call :stroka2
if "%virazhenie%"=="stroka3" Call :stroka3
Pause
Exit /B

:stroka1
echo stroka1
Exit /B

:stroka2
echo stroka2
Exit /B

:stroka3
echo stroka3
Exit /B

:NetSovpadeniy
echo NetSovpadeniy
Pause
Exit /B

Или@Echo Off
cls
set /p virazhenie=Input stroka# ^>

if "%virazhenie%" neq "stroka1" If "%virazhenie%" neq "stroka2" If "%virazhenie%" neq "stroka3" Call :NetSovpadeniy &Exit /B
Call :%virazhenie%
Pause
Exit /B

:stroka1
echo stroka1
Exit /B

:stroka2
echo stroka2
Exit /B

:stroka3
echo stroka3
Exit /B

:NetSovpadeniy
echo NetSovpadeniy
Pause
Exit /B

epoddubniy
29-07-2021, 06:37
megaloman, скажите пожалуйста, как правильно реализовать
если :NetSovpadeniy, то возврат к set /p virazhenie=Input stroka# ^>

megaloman
29-07-2021, 09:04
epoddubniy, @Echo Off
:Begin
cls
set /p virazhenie=Input stroka# ^>

if "%virazhenie%" neq "stroka1" If "%virazhenie%" neq "stroka2" If "%virazhenie%" neq "stroka3" Call :NetSovpadeniy &GoTo :Begin
..........
..........Однако это трудоёмко при использовании набирать stroka1, stroka2, stroka3. Если процедура: "нет совпадения" нужна только для выдачи информации, она вообще не нужна. @Echo Off
cls
Echo Type 1,2,3,C
CHOICE /C 123C /N /M "1-stroka1, 2-stroka1, 3-stroka1, C-завершить"
Set /A Out=%Errorlevel%

If %Out%==4 Exit /B

If %Out%==1 Call :stroka1
If %Out%==2 Call :stroka2
If %Out%==3 Call :stroka3
Pause
Exit /B 0

:stroka1
echo stroka1
Exit /B

:stroka2
echo stroka2
Exit /B

:stroka3
echo stroka3
Exit /B




© OSzone.net 2001-2012