С Новым годом! Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.65/103: Рейтинг темы: голосов - 103, средняя оценка - 4.65
 Аватар для KiraLis39
9 / 10 / 1
Регистрация: 23.07.2014
Сообщений: 346

Как пользоваться командой CHOICE?

24.07.2014, 22:08. Показов 21415. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Что-то я никак не въеду в работу команды choice

Не пойму как она работает? как определяет что делать при выборе варианта или как это прописать?
Легко все делается через простой способ:

Bash
1
2
3
4
Set /p x="Выберите вариант: Да (д) или Нет (н)"
 
if %x%==д echo Выбран первый вариант или делаем то-то, то-то...
if %x%==н echo Другое то-то...
Но в случае с чойсом мне нравится большая вроде бы как компактность и в принципе же он нацелен на выполнение таких задач? Так как определять его варианты и действия?

Добавлено через 33 минуты
Балин (( я так понимаю, в CMD вообще русский язык не работает? В смысле при выборе вариантов ответа YN воспринимаются даже yn а на русском ДН не равно дн? Короче для облегчения диалогов придется вечно давать варианты на англ.?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.07.2014, 22:08
Ответы с готовыми решениями:

Ввод на время. Т.е. как choice
Я знаю,что в choice есть такая вещь: choice>nul /T Кол-во_времени /C Кнопки_нажатия /CS /D Кнопка_по_умолчанию >nul Можно ли то же...

Choice для ХР
Ребят. Привет. ХР не поддерживает choys. А как бы заменить чем нибудь аналогичным? Надо право выбора хотя бы двух вариантов. ...

Команда выбора choice
Здравствуйте, помогите разобраться с написанием bat файла выбора(choice), если выбрать: 1 выход из батника, 2(@echo off shutdown.exe -s...

19
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
24.07.2014, 22:35
Цитата Сообщение от KiraLis39 Посмотреть сообщение
Балин (( я так понимаю, в CMD вообще русский язык не работает? В смысле при выборе вариантов ответа YN воспринимаются даже yn а на русском ДН не равно дн?
Регистр символов игнорируется только для букв английского алфавита.
Почему Вы говорите, что русский не работает?


Коду возврата команды choice будет равняться порядковому номеру символа, выбранного из перечисления /C 12345.

Например,

Bash
1
2
3
4
5
choice /C ABC
 
if %errorlevel%==1 echo Вы выбрали A
if %errorlevel%==2 echo Вы выбрали B
if %errorlevel%==3 echo Вы выбрали C
Миниатюры
Как пользоваться командой CHOICE?  
2
 Аватар для KiraLis39
9 / 10 / 1
Регистрация: 23.07.2014
Сообщений: 346
24.07.2014, 22:41  [ТС]
Цитата Сообщение от Dragokas Посмотреть сообщение
Коду возврата команды choice будет равняться порядковому номеру символа, выбранного из перечисления /C 12345.
А, так значит определяется выбранный вариант через код ошибки?.. это.. необычно

А про язык я говорю, что если в варианты ответа в том же чойсе вложить большие буквы йес и ноу - будут работать любые и большие и маленькие! А если на русском предлагать варианты как да и нет, в смысле "д" и "н" - то тогда будут в программе проходить только именно маленькие буквы, а большие Д и Н не примутся! Вот в чем проблема (
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
24.07.2014, 22:43
Ну да. Я тоже не знал. Вот такая она эта утилита.
Цитата Сообщение от Dragokas Посмотреть сообщение
Регистр символов игнорируется только для букв английского алфавита.
0
 Аватар для KiraLis39
9 / 10 / 1
Регистрация: 23.07.2014
Сообщений: 346
24.07.2014, 22:44  [ТС]
Или нужно сразу предлагать БОЛЬШИЕ или оба варианта - тогда работает но занимает в два раза больше места ( Так что пока мне придется переписывать все д и н на y и n..

Добавлено через 26 секунд
Ну, просто в чойсе есть /CS - я надеялся на него..
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
24.07.2014, 22:48
Чаще всего пользователь использует нижний регистр букв.
0
 Аватар для KiraLis39
9 / 10 / 1
Регистрация: 23.07.2014
Сообщений: 346
24.07.2014, 22:50  [ТС]
Ну да, это понятно.. еще на ШИФТ постоянно попадать..
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
24.07.2014, 22:53
Вот писал утиль, который показывает в коде возврата ASC-код нажатой клавиши.
От меня.
От Charles Kludge.

Может, Вам такая будет интереснее.
1
 Аватар для KiraLis39
9 / 10 / 1
Регистрация: 23.07.2014
Сообщений: 346
25.07.2014, 08:56  [ТС]
О, нашел сообщение! Уже написал в другой теме - с помощью этого можно активировать 2 события, при выборе вариантов, одновременно?
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
25.07.2014, 12:13
Я не понимаю, что означает 2 события.
В CMD нет понятия "событие".
0
 Аватар для KiraLis39
9 / 10 / 1
Регистрация: 23.07.2014
Сообщений: 346
26.07.2014, 12:25  [ТС]
Как нет? я пишу
Bash
1
echo Привет.
И вот оно - событие - вывод на экран надписи Привет.

Мне нужно ДВА события: мигание курсора, приглашающего ввести пароль и текущий таймер на 10 сек, после которого программа закроется с надписью "Время для ввода пароля истекло"
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
26.07.2014, 16:23
Под событиями в программировании
подразумевают выполнение определенных команд
при его возникновении.

В CMD нет механизма отслеживания событий.

Сама echo - это команда (оператор).

Цитата Сообщение от KiraLis39 Посмотреть сообщение
Мне нужно ДВА события: мигание курсора, приглашающего ввести пароль и текущий таймер на 10 сек, после которого программа закроется с надписью "Время для ввода пароля истекло"
Можно сделать с помощью второго батника,
которому передаешь PID текущего батника.

По истечении времени 2-й батник закрывает 1-ый через taskkill
и выводит на экран msg.
0
 Аватар для KiraLis39
9 / 10 / 1
Регистрация: 23.07.2014
Сообщений: 346
26.07.2014, 16:35  [ТС]
Ага.. это мысль.

...а PID это что?

Добавлено через 3 минуты
Как бы так написать..

Вроде

Bash
1
2
3
4
5
echo Введите пароль: 
call :two.bat
:: из второго бат СРАЗУ возвращаемся, не закрывая, и далее в нем запускается таймер на Килл первого.
:: пока во втором бат считает таймер
set /p "pass=>"
так?
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
26.07.2014, 16:45
PID - это ProcessID (идентификатор процесса).

1.bat

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@echo off
SetLocal EnableExtensions
 
:: из второго бат СРАЗУ возвращаемся, не закрывая, и далее в нем запускается таймер на Килл первого.
:: пока во втором бат считает таймер
 
call :GetCurrentProcessID CurPID
start "" /min "2.bat" %CurPID%
 
set /p "pass=Введите пароль: "
echo 1>ready
pause & exit /B
 
:GetCurrentProcessID [_out_Буфер для хранения PID текущего процесса]
  :: Функция получения PID текущего процесса командной строки
  SetLocal EnableDelayedExpansion
  for /f "tokens=2 delims=," %%a in ('tasklist /fo csv /nh ^| find /i "cmd.exe"') do set "curPID=!x!"& set "x=%%~a"
EndLocal & set "%~1=%curPID%" & Exit /B
2.bat

Bash
1
2
3
4
@echo off
ping -n 11 127.1
if exist ready (del ready) else (taskkill /f /PID %~1 & msg * "Timeout !!!")
exit
0
 Аватар для KiraLis39
9 / 10 / 1
Регистрация: 23.07.2014
Сообщений: 346
26.07.2014, 17:04  [ТС]
Цитата Сообщение от Dragokas Посмотреть сообщение
PID - это ProcessID (идентификатор процесса).
Значит правильно понял.

Цитата Сообщение от Dragokas Посмотреть сообщение
call :GetCurrentProcessID CurPID
Тут я так понимаю, вызавает первый бат свой ID и записывает его в CurPID для передачи второму? знак равно не нужен? обычно просто все выглядит немного иначе.

Цитата Сообщение от Dragokas Посмотреть сообщение
echo 1>ready
Это я не совсем понял. Почему не "ready>2.bat"

Цитата Сообщение от Dragokas Посмотреть сообщение
ping -n 11 127.1
Вместо таких команд я предпочитаю использовать
Bash
1
ping -n xxx localhost
Вроде по-надежнее будет. А в данный момент и вовсе использую везде
Bash
1
nircmd wait xxx
Просто таких вариантов в интернете много предлагают - и как правило ни один не работает. Все дают "Превышение ожидания". Потому localhost мне нравится - работает без проблем пока.
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
26.07.2014, 17:12
Цитата Сообщение от KiraLis39 Посмотреть сообщение
Вместо таких команд я предпочитаю использовать
Это и есть localhost.

Цитата Сообщение от KiraLis39 Посмотреть сообщение
Это я не совсем понял. Почему не "ready>2.bat"
Файловый маркер для 2-го бата, иначе он в любом случае зароет первый.
Файл появляется в папке после того, как юзер введет пароль.
Это является маркером для бата № 2, чтобы не закрывать бат № 1.

Цитата Сообщение от KiraLis39 Посмотреть сообщение
знак равно не нужен?
без понятия.

Цитата Сообщение от KiraLis39 Посмотреть сообщение
Вроде по-надежнее будет. А в данный момент и вовсе использую везде
Если нет ограничений на доп. ПО, то лучше через nircmd.
0
 Аватар для KiraLis39
9 / 10 / 1
Регистрация: 23.07.2014
Сообщений: 346
26.07.2014, 17:14  [ТС]
Цитата Сообщение от Dragokas Посмотреть сообщение
Файл появляется в папке после того, как юзер введет пароль.
Это является маркером для бата № 2, чтобы не закрывать бат № 1.
Ок, понял. Создать любой файл, чтобы второй обнаружил его рядом с собой.

Цитата Сообщение от Dragokas Посмотреть сообщение
Если нет ограничений на доп. ПО, то лучше через nircmd.
Тут как известно - один минус, при передаче программы надо не забыть сказать инсталлятору, чтоб закинул все дополнительное в папку Виндоус...
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
26.07.2014, 17:16
Цитата Сообщение от KiraLis39 Посмотреть сообщение
Тут как известно - один минус, при передаче программы надо не забыть сказать инсталлятору, чтоб закинул все дополнительное в папку Виндоус...
Это плохой тон.
Дополнительные компоненты должны располагаться рядом с батником или в папке установки.
1
 Аватар для KiraLis39
9 / 10 / 1
Регистрация: 23.07.2014
Сообщений: 346
26.07.2014, 21:15  [ТС]
Ну да, в теории.. но часть пользователей разводит на раб.столе такой писец, т.к боится зайти даже в папку мой компьютер чтоб че-нить не сломать, не то что файлы неизвестные еще самому туда копировать.. Но с другой стороны мы и не для них стараемся.. хотя их большинство..

Добавлено через 2 минуты
Я некоторое время сборки Майнкрафт делал. Для них же инсталляторы создавал - что, куда, какие папки и файлы в Програм Файлс, какие в АппДата, какие на раб стол, что оставить в папке установщика на усмотрение пользователя, руководствуясь РидМи... все приходится продумывать за пользователей - так проще и меньше "проблем", типа "А я вот у друга скачал игру на флешку, "Кал офф дьюти"... с рабочего стола.. а она у меня не открывается! "

Добавлено через 1 минуту
Люди доверяют, когда нажал один раз - и все работает, и без рекламы, мусора и баннеров.
0
5 / 5 / 0
Регистрация: 17.03.2021
Сообщений: 162
22.12.2021, 18:50
Wprompt 2.32 Standard Message Box

тут https://horstmuc.de/w32dial.htm

там ещё есть утили полезные

тайм аут задать можно, и гуи оболочка выскакивает с Да или Нет и ещё текст там свой вставляешь. Мне нравиться




на да выдавала 222 и выход, а на нет выдавала 111 и выход.



rem ===============================

Wprompt.exe "Start " "Через 10 секунд Продолжится загрузка [2] cut81.cmd (или по нажатию на Yes) , если No - то не будет запускаться" YesNo 1:10 ?
if errorlevel 2 (
echo Demo aborted
echo Continuing demo

nircmdc trayballoon "!" "111" "shell32.dll,-154" 10000
rem @if %showdh%!==! start "" /D"E:\MitSoftWin81\for files\tools\Process Killer 1.4.2" "cut812.cmd"

exit
exit
goto repeat
) else (
echo Demo aborted
)

:repeat

rem ======================================== ====================


nircmdc trayballoon "!" "222" "shell32.dll,-154" 10000


exit

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.12.2021, 18:50
Помогаю со студенческими работами здесь

Какая-то странная проблема с CHOICE
суть проблемы в чем. когда я удаляю и переименовываю файлы в каталоге - работает нормально. но когда я перемещаю или копирую то - ничего не...

Запуск программы по выбору (Choice) и ведение протокола времени работы
1.Написать командный файл,принимающий при старте параметр имя приложения при запуске.Командный файл должен запустить это...

Как изменить шрифт системной командой
Как изменить шрифт и/или размер отображаемого текста системной командой?

Как отключить несколько служб одной командой?
Например: net stop Wlansvc WdiSystemHost Не работает!

Как выполнить арифметические операции в цикле с командой FOR?
Необходимо выполнить арифметические операции над каждой строкой в файле 123.txt. Строки состоят из 12-тизначных цифр, каждую строку...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru