Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Остановка цикла во время ввода значения переменной с клавиатуры (http://forum.oszone.net/showthread.php?t=340101)

Юрий.Кайдаулов@vk 14-04-2019 08:20 2867681

Остановка цикла во время ввода значения переменной с клавиатуры
 
Добрый день,
хочу вот полностью отказаться от проводника и перейти на возможности 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 2867685

Юрий.Кайдаулов@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 2867686

Цитата:

Цитата Юрий.Кайдаулов@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: припоздал.

Юрий.Кайдаулов@vk 15-04-2019 15:10 2867860

Я вот на днях тоже нашёл решение своей же проблемы: слишком много 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
Однако можно сделать куда проще »

, да-к я без проводника же ведь буду

Iska 16-04-2019 01:07 2867924

Цитата:

Цитата Юрий.Кайдаулов@vk
да-к я без проводника же ведь буду »

Для «без Проводника» есть Far Manager ;).

alpap 16-04-2019 01:51 2867927

Юрий.Кайдаулов@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 »



Время: 15:14.

Время: 15:14.
© OSzone.net 2001-