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

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

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

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


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

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


Изменения
Автор: Юрий.Кайдаулов@vk
Дата: 14-04-2019
Добрый день,
хочу вот полностью отказаться от проводника и перейти на возможности cmd. Это позволит исключить значительное количество провисаний и увеличит производительность.
Так вот, во время написания программы, направленной на запуск интересующих пользователя приложений. Суть программы в следующем:
Пользователю высвечивается список доступных программ, после чего будет дана возможность ввести номер, под которым была показана программа. После программа обрабатывается ввод и происходит запуск необходимого приложения. Это мне удалось сделать. Так вот, после этого код кончается и программа закрывается. Я бы хотел так, чтобы этот список снова и снова высвечивался на экране. Удалось написать следующий код с использованием цикла FOR, но тогда сам цикл не даёт пользователю возможности для ввода, постоянно повторяет список программ. Сам по себе пишу давольно сложные программы, но вот такая, казалось бы простая программа, оказалось абсолютно не простой
Код: Выделить весь код
Setlocal EnableDelayedExpansion
chcp 1251
set app=
FOR /L %%b IN (-99999,1,999999) DO (
echo 1.CMD
echo 2.Microsoft Office Word
...
echo 33.Microsoft Edge
echo 34.Google Chrome
set /P app=
if "!app!"=="1" (CMD.lnk)
if "!app!"=="2" ("Microsoft Office Word.lnk")
...
if "!app!"=="33" ("Microsoft Edge.lnk")
if "!app!"=="34" ("Google Chrome.lnk")
)

Отправлено: 08:20, 14-04-2019

 

Ветеран


Contributor


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

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


Юрий.Кайдаулов@vk, Если хочется поизвращаться (или идти на поводу у плохообучаемого пользователя?) то
Код: Выделить весь код
@Echo Off
chcp 1251
:Begin
cls
	set "app="
	echo 1.CMD
	echo 2.Microsoft Office Word
 ...
	echo 33.Microsoft Edge
	echo 34.Google Chrome
	
	set /P "app="

	if "%app%"=="1" (CMD.lnk)
	if "%app%"=="2" ("Microsoft Office Word.lnk")
 ...
	if "%app%"=="33" ("Microsoft Edge.lnk")
	if "%app%"=="34" ("Google Chrome.lnk")
GoTo :Begin
Pause
Exit /B
Однако можно сделать куда проще: где-нибудь (можно и на рабочем столе, но совершенно необязательно, у меня аналогичная папка в моих документах) сделайте папку, например, "Мои программы" и создайте там иконки нужных Вам программ. Не знаю, что у Вас за система, в семёрке, например, можно создать на эту папку панель инструментов.
В 2 клика запустим всё что нужно.

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


Последний раз редактировалось megaloman, 14-04-2019 в 14:27.

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

Отправлено: 10:42, 14-04-2019 | #2



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

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


Ветеран


Contributor


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

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


Цитата Юрий.Кайдаулов@vk:
но тогда сам цикл не даёт пользователю возможности для ввода, »
Даёт.

Цитата Юрий.Кайдаулов@vk:
Удалось написать следующий код с использованием цикла FOR »
for здесь не нужен. Можно так (оставляя за скобками саму целесообразность такового подхода):
Код: Выделить весь код
:Repeat
	
	echo 1.CMD
	echo 2.Microsoft Office Word
	...
	echo 33.Microsoft Edge
	echo 34.Google Chrome
	echo.
	echo 0. Exit
	set /P app=
	if "!app!"=="1" (CMD.lnk)
	if "!app!"=="2" ("Microsoft Office Word.lnk")
	...
	if "!app!"=="33" ("Microsoft Edge.lnk")
	if "!app!"=="34" ("Google Chrome.lnk")
	if "!app!"=="0" exit /b 0
	set /P app=
	goto :Repeat
Update: припоздал.
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:49, 14-04-2019 | #3


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


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

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


Я вот на днях тоже нашёл решение своей же проблемы: слишком много echo. Там они выполняются не сразу, как, например, в языках типа C, или JS. Вот он и не успевал всё выводить, повторяя эти вывод постоянно лишь до 30. Вообщем узнал про команду more и всё стало как хотел. Идея всё же от megaloman оказалась всё же лучше и короче, отдельное за это спасибо
Код: Выделить весь код
Setlocal EnableDelayedExpansion
@ECHO OFF
chcp 1251
set app=
FOR /L %%b IN (-99999,1,999999) DO (
more list1.txt
more list2.txt
set /P app=
if "!app!"=="1" (CMD.lnk)
if "!app!"=="2" ("Microsoft Office Word.lnk")
...
if "!app!"=="33" ("Microsoft Edge.lnk")
if "!app!"=="34" ("Google Chrome.lnk")
)
В list1.txt и list2.txt находятся как раз-таки эти все названия

Цитата megaloman:
Однако можно сделать куда проще »
, да-к я без проводника же ведь буду

Отправлено: 15:10, 15-04-2019 | #4


Ветеран


Contributor


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

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


Цитата Юрий.Кайдаулов@vk:
да-к я без проводника же ведь буду »
Для «без Проводника» есть Far Manager .
Это сообщение посчитали полезным следующие участники:

Отправлено: 01:07, 16-04-2019 | #5


Ветеран


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

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


Юрий.Кайдаулов@vk, а можете мне пояснить чем это удобно или зачем вообще?
Например зачем просто, без надобности запускать cmd.exe или Word.exe? Почему сразу не создавать что нужно или открывать в чем нужно или создавать и открыть одновременно что надо и в чем надо? Это ведь наоборот кусок работы чтобы еще предварительно запускать что-то, выискивать там какие-то пункты и т.д.
Вот пример с созданием bat (сразу в открытом виде в AkelPad или в виде файла, закрытом виде) или открыть bat в чем нужно. Также и для других файлов
создать
https://drive.google.com/open?id=1Bs...-yvHLGSjzJkc8Y
открыть
https://drive.google.com/open?id=1nt...v3DId15fC2ThRb
или добавить в меню пункт на открытие чего-либо (кроме ком. строки как у меня)
https://drive.google.com/open?id=1bL...bc_aOPKzCKNcL5
хотя удобнее, а особенно если привык, работать в файловом менеджере, очень хороший пример -
Цитата Iska:
Для «без Проводника» есть Far Manager »

Последний раз редактировалось alpap, 16-04-2019 в 14:57.


Отправлено: 01:51, 16-04-2019 | #6



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Остановка цикла. Отправка почты через Blat s.i.p.a Скриптовые языки администрирования Windows 3 12-04-2018 01:31
Установка - Во время уcтановки windows 7 происходит остановка после "windows is loading files..." Stasedj Microsoft Windows 7 3 23-12-2013 14:40
Интерфейс - Во время игры в любую игру или во время работы с программами все подвисает ! Vlads986 Microsoft Windows 7 1 22-10-2013 08:56
собрать переменные из цикла в одну переменную while binders Вебмастеру 7 16-09-2011 20:11
Принтер - [решено] Samsung ML - 1210 остановка во время разогрева sergey9841 Прочее железо 4 13-03-2009 16:58




 
Переход