|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Прервать цикл |
|
CMD/BAT - [решено] Прервать цикл
|
Новый участник Сообщения: 3 |
Профиль | Отправить PM | Цитировать Возможно ли прервать данный цикл (кроме как Ctrl+Pause) что бы был вариант выбора: 1)перейти к какой-либо команде; 0)выйти?
Или по другому - что бы до ответа пользователя ( при set /p dialog= ) окно с результатами циклически меняло цвет. |
|
Отправлено: 01:51, 06-10-2012 |
Старожил Сообщения: 415
|
Профиль | Отправить 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
|
Профиль | Отправить PM | Цитировать Встроить в сам файл не получилось, оформил в отдельный с вызовом через call, но вызов срабатывает только в одном из двух режимов. В архиве, собственно, то, куда я это хочу встроить. Я так думаю, что то, что я там "наконструировал" ещё можно хорошо оптимизировать. Моих мозгов для этого ещё пока недостаёт. Если не трудно, помогите, пожалуйста.
|
Отправлено: 20:40, 06-10-2012 | #3 |
Пользователь Сообщения: 53
|
Профиль | Отправить PM | Цитировать |
Отправлено: 01:19, 15-11-2017 | #4 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Masutin:
|
||
Отправлено: 03:15, 15-11-2017 | #5 |
Пользователь Сообщения: 53
|
Профиль | Отправить PM | Цитировать Возможно ли условие подобно нажатию Ctrl+C?
Результаты работы цикла проверяются вручную. Возможно ли условие для выхода или повтора? Например, между pause&goto и pause&exit, задав ввод некого текста либо иначе условие повтора или окончания? |
Отправлено: 00:06, 25-11-2017 | #6 |
Ветеран Сообщения: 27449
|
Профиль | Отправить 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»: Вкупе к прочему, для choice.exe можно задать таймаут ответа и умолчание, буде таковая необходимость. |
Отправлено: 00:34, 25-11-2017 | #7 |
Пользователь Сообщения: 53
|
Профиль | Отправить PM | Цитировать Если при выполнении Вашего кода
до первого повтора цикла нажать Enter без ввода буквы, окно закроется. Если после повтора цикла нажать Enter без ввода буквы, это считается вводом предыдущего выбора, и цикл повторится. Можно ли задать для Enter (без буквы) то или иное действие?
|
Отправлено: 20:08, 27-11-2017 | #8 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Masutin:
Цитата Masutin:
: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:
|
|||
Отправлено: 05:07, 28-11-2017 | #9 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
.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 |
|