Como faço para mover esta descrição de escolha de lote para uma nova linha?

2

Eu tenho um modelo de script em lote que inclui uma opção, desejo fazer a pergunta sobre o que o usuário final deseja fazer e a (s) descrição (ões) de escolha abaixo da pergunta. Aqui está o meu modelo:

@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

Como você pode ver no script, eu já tentei & ECHO.(%DESCRIPTION%) entre outros métodos que inserem uma nova linha. Acredito que precisa haver um ECHO adicional antes da questão da escolha real com o método acima, mas devido à estrutura do código, não sei onde colocá-lo. O que estou fazendo de errado? Existe talvez um personagem que precisa ser escapado devido à sintaxe?

    
por Mr. Mendelli 19.02.2018 / 16:48

1 resposta

2

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:

  1. primeiro o comando set /p a=b é executado, mostrando o prompt e lendo uma única linha de entrada;
  2. 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. )

    
por 19.02.2018 / 17:02