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


82

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



@ 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», если они хотят ввести значение по умолчанию.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.