Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Оператор IF несколько условий (http://forum.oszone.net/showthread.php?t=349267)

epoddubniy 24-07-2021 13:48 2962758

Оператор IF несколько условий
 
Здравствуйте.
Помогите пожалуйста. Нужно, чтобы, переходило к соответствующей метке перехода

в этом выражении какая-то ошибка. Его суть, если не выполняется ни одно из предыдущих условий, то....
Код:

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 2962759

Цитата:

Цитата epoddubniy
если не выполняется ни одно из предыдущих условий, то.... »

Так Вы уже выше все эти условия проверили, тогда зачем ещё одно условие создавать?
Сразу переходите по указателю
Код:

:NetSovpadeniy

megaloman 24-07-2021 16:10 2962760

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 2963073

megaloman, скажите пожалуйста, как правильно реализовать
если
Код:

:NetSovpadeniy
, то возврат к
Код:

set /p virazhenie=Input stroka# ^>

megaloman 29-07-2021 09:04 2963076

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



Время: 16:08.

Время: 16:08.
© OSzone.net 2001-