Как прочитать ввод с консоли в пакетном файле?

82

Как прочитать ввод с консоли в пакетном файле? Я пытаюсь достичь функциональности scanf в C. Как я могу сделать то же самое в пакетном файле?

Nohsib
источник
@ Raymond: Нет, вопрос в том, чтобы прочитать несколько символов в виде строки с клавиатуры в переменной.
Nohsib
Команда set /pчитает все, что вводит пользователь, будь то одна буква или несколько.
Раймонд Чен,
@ Raymond: не могли бы вы поделиться фрагментом кода об этом ..
Nohsib

Ответы:

141

Фрагмент кода в связанном предложенном дубликате считывает вводимые пользователем данные.

ECHO A current build of Test Harness exists.
set /p delBuild=Delete preexisting build [y/n]?: 

Пользователь может ввести сколько угодно букв, и это войдет в переменную delBuild.

Раймонд Чен
источник
36
Примечание: пользовательский ввод можно использовать с%delBuild%
Джейкоб
1
Должен заметить, что echo !delBuild!при setlocal EnableDelayedExpansionвключении вы получите более надежный результат при выполнении
xacinay
29

Если вы просто хотите быстро оставить экземпляр cmd открытым, а не сразу выйти, достаточно просто сделать следующее:

set /p asd="Hit enter to continue"

в конце вашего скрипта, и он будет держать окно открытым.

Обратите внимание, что это будет установлено asdкак переменная среды и может быть заменено чем угодно.

ТанкорСмаш
источник
15
для этого кто-то придумал pauseкоманду. Кроме того, это set /pне так set \p.
Стефан
6
«Как все говорят» подразумевает, что ответ уже дан, поэтому еще один без дополнительной информации излишен
jeb
1
@jeb ты прав. Моя проблема заключалась в том, что они включали переменные и эхо, а мне это не нужно. Мне потребовалась минута или две, чтобы проанализировать их ответы, поскольку у меня нет опыта пакетной обработки. Я считаю, что мой ответ соответствует минимальному количеству ответов, подходящих для моих нужд.
TankorSmash
@ Стефан, спасибо, чувак, по обоим пунктам. Я искал способ сохранить экземпляр cmd для выхода после завершения скрипта, простой паузы на время X было недостаточно.
TankorSmash
@ArslanAhmad Я только что тестировал, он все еще работает cmd, но не Powershell. Убедитесь, что вы используете правильную вещь.
TankorSmash
18

В дополнение к существующему ответу можно установить параметр по умолчанию следующим образом:

echo off
ECHO A current build of Test Harness exists.
set delBuild=n
set /p delBuild=Delete preexisting build [y/n] (default - %delBuild%)?:

Это позволяет пользователям просто нажать «Enter», если они хотят ввести значение по умолчанию.

Ричард Уильямс
источник