Як прочитати введення з консолі в командному файлі?


82

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



@ Реймонд: Ні, питання полягає в тому, щоб прочитати кілька символів як рядок із клавіатури у змінну.
Nohsib

Команда set /pчитає все, що вводить користувач, будь то одна буква або кілька.
Raymond Chen

@ Реймонд: можете люб'язно поділитися фрагментом коду про це ..
Nohsib

Відповіді:


141

Фрагмент коду у зв’язаному запропонованому дублікаті читає введення користувача.

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

Користувач може ввести скільки завгодно літер, і вона перейде у змінну delBuild.


36
Примітка: Ви можете використовувати введені користувачем дані з%delBuild%
Jacob

1
Потрібно зауважити, що echo !delBuild!це дасть вам більш setlocal EnableDelayedExpansion
надійний

30

Якщо ви просто хочете швидко залишити екземпляр cmd замість того, щоб негайно вийти з нього, досить просто виконати наступне

set /p asd="Hit enter to continue"

в кінці вашого сценарію, і це буде тримати вікно відкритим.

Зверніть увагу, що це буде встановлено asdяк змінну середовища і може бути замінено будь-яким іншим.


15
для цього хтось вигадав pauseкоманду. Також це set /pні set \p.
Стефан,

6
"Як усі говорять", означає, що відповідь уже дана, тому інша без додаткової інформації є непотрібною
jeb 20.03.15

1
@jeb ти маєш рацію. моя проблема полягала в тому, що вони включали змінні та ехо, тоді як мені це не потрібно. Мені знадобилася хвилина чи дві, щоб проаналізувати їхні відповіді, оскільки я не маю пакетного досвіду. Я вважаю, що моя відповідь задовольняє мінімальну відповідь, яка підходить для моїх потреб.
TankorSmash

@Stephan дякує, чувак, за обома пунктами. Я шукав спосіб зберегти екземпляр cmd для виходу після завершення сценарію, просто паузи на X часу було недостатньо.
TankorSmash

@ArslanAhmad Я щойно перевірив, він все ще працює від cmd, але не Powershell. Переконайтеся, що ви використовуєте правильну річ.
TankorSmash

19

На додаток до існуючої відповіді можна встановити параметр за замовчуванням наступним чином:

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.