Se você quiser que a questão e o cursor de entrada estejam acima da saída da descrição, você precisará de uma maneira de mover o cursor para cima. Os scripts em lote não podem fazer isso sozinhos (embora o PowerShell possivelmente possa fazer isso); você precisaria de uma pequena ferramenta externa que usa as APIs do console do Windows para mover o cursor algumas linhas para cima.
Se você quiser que apenas a questão esteja acima da descrição, permitindo que o aviso pisque abaixo de tudo, é fácil - basta enviar a pergunta usando um comando separado:
echo Do you want to %CHOICE%?
echo %DESCRIPTION%
set /p ANSWER=^>
echo You entered %ANSWER%.
Sua tentativa original não funciona por um motivo diferente.
O set
e o echo
são comandos completamente separados - não importa que você os separe com um &
em vez de uma quebra de linha; eles ainda são executados individualmente:
- primeiro o comando
set /p a=b
é executado, mostrando o prompt e lendo uma única linha de entrada; - então, a entrada após já foi lida,
echo %description%
é executada, mostrando seu texto.
Em outras palavras, echo
não insere uma nova linha no script ; ele diz ao script para produzir uma nova linha em sua saída, mas isso não é a mesma coisa.
(Em outras linguagens de script / programação, para inserir uma nova linha no script você usaria \n
ou apenas uma quebra de linha literal, mas os scripts em lotes do Windows não têm equivalentes a isso. )