Come posso spostare questa descrizione della scelta batch su una nuova riga?


2

Ho un modello di script batch che include una scelta, voglio avere la domanda su ciò che l'utente finale vuole fare e le descrizioni delle scelte sotto la domanda. Ecco il mio modello:

@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

Come puoi vedere nella sceneggiatura, ho già tentato, & ECHO.(%DESCRIPTION%)tra gli altri metodi, di inserire una nuova riga. Credo che ci debba essere un ulteriore ECHOprima della domanda effettiva scelta con il metodo sopra, ma a causa della struttura del codice non so dove posizionarlo. Che cosa sto facendo di sbagliato? C'è forse un personaggio che deve essere evaso a causa della sintassi?


Dal punto di vista UX è confuso che la richiesta di input appaia prima delle informazioni che l'utente deve prendere in considerazione quando risponde. Solo un'opinione.
Twisty Impersonator,

Risposte:


2

Se vuoi che la domanda e il cursore di input siano sopra l'output della descrizione, avrai bisogno di un modo per spostare il cursore verso l'alto. Gli script batch non possono farlo da soli (anche se PowerShell potrebbe farlo); avresti bisogno di un piccolo strumento esterno che utilizza le API della console di Windows per spostare il cursore di alcune righe più in alto.

Se vuoi che solo la domanda sia sopra la descrizione, permettendo al prompt di lampeggiare sotto tutto, è facile - basta emettere la domanda usando un comando separato:

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

Il tuo tentativo originale non funziona per un motivo diverso.

I comandi sete echosono completamente separati - non importa che li separi con un'interruzione &di riga anziché; vengono comunque eseguiti singolarmente:

  1. prima set /p a=bviene eseguito il comando, mostrando il prompt, quindi leggendo una singola riga di input;
  2. quindi, dopo che l' input è già stato letto, echo %description%viene eseguito, mostrando il tuo testo.

Quindi, in altre parole, echonon inserisce una nuova riga nello script ; dice allo script di produrre una nuova riga nel suo output, ma non è affatto la stessa cosa.

(In altri linguaggi di scripting / programmazione, per inserire una nuova riga nello script si utilizzerà \no semplicemente un'interruzione di riga letterale, ma gli script batch di Windows non hanno di nuovo equivalenti a quello.)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.