Войти

Показать полную графическую версию : [решено] Остановка цикла во время ввода значения переменной с клавиатуры


Юрий.Кайдаулов@vk
14-04-2019, 08:20
Добрый день,
хочу вот полностью отказаться от проводника и перейти на возможности 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")
)

megaloman
14-04-2019, 10:42
Юрий.Кайдаулов@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 клика запустим всё что нужно.

Iska
14-04-2019, 10:49
но тогда сам цикл не даёт пользователю возможности для ввода, »
Даёт.

Удалось написать следующий код с использованием цикла 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: припоздал.

Юрий.Кайдаулов@vk
15-04-2019, 15:10
Я вот на днях тоже нашёл решение своей же проблемы: слишком много 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 находятся как раз-таки эти все названия

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

Iska
16-04-2019, 01:07
да-к я без проводника же ведь буду »
Для «без Проводника» есть Far Manager ;).

alpap
16-04-2019, 01:51
Юрий.Кайдаулов@vk, а можете мне пояснить чем это удобно или зачем вообще?
Например зачем просто, без надобности запускать cmd.exe или Word.exe? Почему сразу не создавать что нужно или открывать в чем нужно или создавать и открыть одновременно что надо и в чем надо? Это ведь наоборот кусок работы чтобы еще предварительно запускать что-то, выискивать там какие-то пункты и т.д.
Вот пример с созданием bat (сразу в открытом виде в AkelPad или в виде файла, закрытом виде) или открыть bat в чем нужно. Также и для других файлов
создать
https://drive.google.com/open?id=1Bstv4jzMGUMMaZ9aA7-yvHLGSjzJkc8Y
открыть
https://drive.google.com/open?id=1ntgwVLTdvIUJL3UYzRv3DId15fC2ThRb
или добавить в меню пункт на открытие чего-либо (кроме ком. строки как у меня)
https://drive.google.com/open?id=1bLRiwpKs-miIaYU_2sbc_aOPKzCKNcL5
хотя удобнее, а особенно если привык, работать в файловом менеджере, очень хороший пример -
Для «без Проводника» есть Far Manager »




© OSzone.net 2001-2012