2

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

@ECHO OFF
Color __
TITLE %TITLE%
ECHO.
:choice
set /P c=Do you want to %CHOICE%? & ECHO.(%DESCRIPTION%)
if /I "%c%" EQU "Y" goto :choice_yes
if /I "%c%" EQU "C" goto :choice_cancel
goto :choice
:choice_cancel
echo %CHOICE% has been cancelled.
:choice_yes
:: Insert additional commands or code here.
pause
@ECHO OFF

Как вы можете видеть в сценарии, я уже пытался & ECHO.(%DESCRIPTION%) среди других методов, которые вставляют новую строку. Я полагаю, что перед вопросом о реальном выборе с помощью вышеуказанного метода должно быть дополнительное ECHO , но из-за структуры кода я не знаю, где его разместить. Что я делаю неправильно? Может быть, есть символ, который нужно экранировать из-за синтаксиса?

1 ответ1

2

Если вы хотите, чтобы вопрос и курсор ввода находились выше вывода описания, вам понадобится способ переместить курсор вверх. Пакетные сценарии не могут сделать это в одиночку (хотя, возможно, PowerShell); вам понадобится небольшой внешний инструмент, который использует API консоли Windows для перемещения курсора на несколько строк выше.

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

echo Do you want to %CHOICE%?
echo %DESCRIPTION%
set /p ANSWER=^>
echo You entered %ANSWER%.

Ваша первоначальная попытка не работает по другой причине.

set и echo - это совершенно отдельные команды - не имеет значения, что вы разделяете их символом & вместо переноса строки; они все еще выполняются индивидуально:

  1. сначала запускается команда set /p a=b , показывающая приглашение, затем читающая одну строку ввода;
  2. затем, после того как ввод уже прочитан, запускается echo %description% , показывающий ваш текст.

Другими словами, echo не вставляет новую строку в скрипт ; он сообщает сценарию, чтобы он выводил новую строку в свой вывод, но это совсем не одно и то же.

(В других языках сценариев / программирования для вставки новой строки в сценарий вы должны использовать \n или просто перенос строки, но пакетные сценарии Windows снова не имеют аналога.)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .