Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Оператор IF несколько условий

Ответить
Настройки темы
CMD/BAT - [решено] Оператор IF несколько условий

Пользователь


Сообщения: 105
Благодарности: 1

Профиль | Отправить PM | Цитировать


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

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

Отправлено: 13:48, 24-07-2021

 

Аватара для NickM

Ветеран


Contributor


Сообщения: 4635
Благодарности: 1115

Профиль | Отправить PM | Цитировать


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

Отправлено: 14:45, 24-07-2021 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Contributor


Сообщения: 2735
Благодарности: 1699

Профиль | Отправить PM | Цитировать


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

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 24-07-2021 в 16:30.

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:10, 24-07-2021 | #3


Пользователь


Сообщения: 105
Благодарности: 1

Профиль | Отправить PM | Цитировать


megaloman, скажите пожалуйста, как правильно реализовать
если
Код: Выделить весь код
:NetSovpadeniy
, то возврат к
Код: Выделить весь код
set /p virazhenie=Input stroka# ^>

Отправлено: 06:37, 29-07-2021 | #4


Ветеран


Contributor


Сообщения: 2735
Благодарности: 1699

Профиль | Отправить PM | Цитировать


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

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 09:04, 29-07-2021 | #5



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Оператор IF несколько условий

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Обработка условий (IF) V!RTuE Скриптовые языки администрирования Windows 1 30-08-2014 05:44
CMD/BAT - Скрипт с проверкой условий wiznv Скриптовые языки администрирования Windows 6 30-07-2014 07:26
VBS/WSH/JS - Завершение условий Тишина Программирование и базы данных 2 11-04-2014 16:23
[решено] Несколько условий в переменной $re2 KrotMen Вебмастеру 2 08-07-2012 15:16
Firewall несколько условий для порта Welcome Microsoft Windows NT/2000/2003 0 14-06-2011 04:07




 
Переход