MS-DOS Пауза пакетного файла с клавишей ввода

146

Возможно ли в командном файле MS-DOS приостановить выполнение сценария и подождать, пока пользователь нажмет клавишу ввода?

Я хочу сделать это внутри цикла. После каждой итерации я хочу, чтобы скрипт приостанавливал и ждал, пока пользователь нажмет «Enter».

dr_rk
источник

Ответы:

247

Есть pauseкоманда, которая делает именно это, хотя это не определенно клавиша ввода.

Если вы действительно хотите дождаться только клавиши ввода, вы можете использовать setкоманду, чтобы запросить ввод пользователя с фиктивной переменной, что-то вроде:

set /p DUMMY=Hit ENTER to continue...

abjuk
источник
17
Вам не нужно указывать имя переменной: set /p=Hit ENTER to continue...или просто, set /p=если вам не нужно приглашение.
ДБЕНХАМ
2
По какой-то причине мое приложение взрывается прямо после логики паузы. Очень странно.
13
11
Кажется немного странным видеть слово «приложение», используемое в этом контексте (пакетный файл)
Адриан Григор
Это не работает для меня. работает только со второго запуска, когда 'set' отработано / сохранено в env.
ses
13

pauseКоманда - это то, что вы ищете. Если вы ищете ТОЛЬКО случай, когда нажата клавиша enter, вы можете использовать runasкоманду:

runas /user:# "" >nul 2>&1

экран будет заморожен до тех пор, пока не будет нажата кнопка ввода. Что мне нравится больше, чем set/p=то, что если вы нажмете другие кнопки, кроме ввода, они не будут отображаться

npocmaka
источник
4

Вы можете сделать это с помощью pauseкоманды, например:

dir
pause
echo Now about to end...
pause
Vic_HT
источник
1
pauseдействительно является единственным действительным ответом MS-DOS(все остальные ответы работают cmdтолько в). Таким образом, ваш ответ на самом деле является единственным полностью правильным ответом на этот специальный вопрос (хотя он был предложен более 7 лет назад)
Стефан,
3

В зависимости от того, какую операционную систему вы используете, если вы гибки, то CHOICEможно использовать для ожидания EXCEPTввода практически любой клавиши

Если вы на самом деле имеете в виду то, что Microsoft настаивает на том, чтобы называть «Командная строка», которая является просто эмулятором MS-DOS, то, возможно, TIMEOUTможет подойти вашей цели (timeout /t -1 ожидание любой клавиши, а не только ENTER) и, конечно, CHOICEснова доступно в последних выпусках WIN.

И предупреждение о SET /P- тогда какset /p DUMMY=Hit ENTER to continue... будет работать,

set "dummy="
set /p DUMMY=Hit ENTER to continue...
if defined dummy (echo not just ENTER was pressed) else (echo just ENTER was pressed)

определит, был ли введен просто ENTER или что-то еще, заканчивающееся на ENTER.

Маг
источник