Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

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

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

Новый участник


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

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


Возможно ли прервать данный цикл (кроме как Ctrl+Pause) что бы был вариант выбора: 1)перейти к какой-либо команде; 0)выйти?

Код: Выделить весь код
@echo off
echo Задача завершена. Нажмите 1 для перехода в меню, 0 для выхода из программы.
:loop  cls  color e2
ping 127.0.0.1 -n 2 >nul
color 2e
ping 127.0.0.1 -n 3 >nul
goto loop
Или по другому - что бы до ответа пользователя ( при set /p dialog= ) окно с результатами циклически меняло цвет.

Отправлено: 01:51, 06-10-2012

 

Старожил


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

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


o3epo, используйте это, как образец. Можете сделать и по другому, главное - чтобы вы уловили идею, за счет чего реализовано неблокирующее ожидание ввода чего-либо пользователем.
Код: Выделить весь код
@Echo Off
:: Проверка на то, проихводится ли вторичный запуск батника
If "%Thread1Started%"=="true" GoTo Thread2

:Thread1
:: Запуск второй копии, циклично меняющей цвета в консоли
Set Thread1Started=true
Start /B "" "%~nx0"
:: Здесь ожидается команда от пользователя
:WaitCmds
Cls
:: Приглашение к вводу
Set /P Cmd=   Enter your command:^> 
:: Проверка на пустое значение
If "%Cmd%"=="" (GoTo WaitCmds) Else (Echo.>"%Temp%\ready.tmp")
:: Вывод команды, к этому времени смена цвета должна прекратиться
Echo.
Echo Command is: "%Cmd%"
Pause&Exit

:Thread2
:: У каждого из цветов одинаковая, достаточно небольшая задержка
:: Проверка на наличие файла-флага, извещающего о введенной команде
If Exist "%Temp%\ready.tmp" (Del "%Temp%\ready.tmp"&Color f0&Exit)
Color f0
Ping -n 2 127.0.0.1>nul
If Exist "%Temp%\ready.tmp" (Del "%Temp%\ready.tmp"&Color f0&Exit)
Color 0f
Ping -n 2 127.0.0.1>nul
GoTo Thread2
Это сообщение посчитали полезным следующие участники:

Отправлено: 04:40, 06-10-2012 | #2



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

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


Новый участник


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

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


Вложения
Тип файла: rar lJPGop+.rar
(532.3 Kb, 10 просмотров)

Встроить в сам файл не получилось, оформил в отдельный с вызовом через call, но вызов срабатывает только в одном из двух режимов. В архиве, собственно, то, куда я это хочу встроить. Я так думаю, что то, что я там "наконструировал" ещё можно хорошо оптимизировать. Моих мозгов для этого ещё пока недостаёт. Если не трудно, помогите, пожалуйста.

Отправлено: 20:40, 06-10-2012 | #3


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


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

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


Можно осуществить нечто вроде?
Код: Выделить весь код
set /p q=Нажмите Enter для завершения или любую другую клавишу для продолжения.
if q==* goto l else exit

Отправлено: 01:19, 15-11-2017 | #4


Ветеран


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

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


Цитата Masutin:
Можно осуществить нечто вроде? »
Вы словами опишите задачу.

Отправлено: 03:15, 15-11-2017 | #5


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


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

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


Возможно ли условие подобно нажатию Ctrl+C?
Результаты работы цикла проверяются вручную. Возможно ли условие для выхода или повтора? Например, между pause&goto и pause&exit, задав ввод некого текста либо иначе условие повтора или окончания?

Отправлено: 00:06, 25-11-2017 | #6


Ветеран


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

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


Masutin, Вы что-то такое хотите получить:
Код: Выделить весь код
:Repeat
	echo bla-bla-bla
	echo bla-bla-bla
	echo bla-bla-bla
	
	set /p sVar=Repeat?
	
	if defined sVar if /i "%sVar%" equ "y" goto :Repeat
?!

На новых ОС вместо set /p можно пользовать «choice.exe»:
Код: Выделить весь код
:Repeat
	echo bla-bla-bla
	echo bla-bla-bla
	echo bla-bla-bla
	
	choice.exe /m "Repeat?"
	
	if %errorlevel% equ 1 goto :Repeat
Вкупе к прочему, для choice.exe можно задать таймаут ответа и умолчание, буде таковая необходимость.
Это сообщение посчитали полезным следующие участники:

Отправлено: 00:34, 25-11-2017 | #7


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


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

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


Если при выполнении Вашего кода
Код: Выделить весь код
:Repeat
set /p sVar=Repeat?
if defined sVar if /i "%sVar%" equ "y" goto :Repeat
до первого повтора цикла нажать Enter без ввода буквы, окно закроется. Если после повтора цикла нажать Enter без ввода буквы, это считается вводом предыдущего выбора, и цикл повторится. Можно ли задать для Enter (без буквы) то или иное действие?

Отправлено: 20:08, 27-11-2017 | #8


Ветеран


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

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


Цитата Masutin:
до первого повтора цикла нажать Enter без ввода буквы, окно закроется. »
Так и задумывалось.

Цитата Masutin:
Если после повтора цикла нажать Enter без ввода буквы, это считается вводом предыдущего выбора, и цикл повторится. »
К сожалению, да. Вот так странно работает set /p.
Код: Выделить весь код
:Repeat
	set sVar=
	
	echo bla-bla-bla
	echo bla-bla-bla
	echo bla-bla-bla
	
	set /p sVar=Repeat?
	
	if defined sVar if /i "%sVar%" equ "y" goto :Repeat
Цитата Masutin:
Можно ли задать для Enter (без буквы) то или иное действие? »
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

:Repeat
	set sVar=
	
	echo bla-bla-bla
	echo bla-bla-bla
	echo bla-bla-bla
	
	set /p sVar=Repeat? && (
		if defined sVar if /i "!sVar!" equ "y" goto :Repeat
	) || (
		echo то или иное действие для Enter без буквы
	)

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

Отправлено: 05:07, 28-11-2017 | #9



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
.NET - цикл do-while c# rom4ik_93@vk Программирование и базы данных 1 24-03-2012 01:11
CMD/BAT - Как прервать работу retab Скриптовые языки администрирования Windows 1 05-10-2011 06:26
C/C++ - Задача на цикл. Hardcore Программирование и базы данных 6 27-09-2010 18:00
Загрузка - Прервать установку SP1 pop2 Microsoft Windows Vista 4 24-11-2008 19:25
C/C++ - Цикл ganselo Программирование и базы данных 4 31-10-2008 12:13




 
Переход