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


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.