Sono disponibili due comandi per i prompt utente sulla riga di comando di Windows:
- impostato con l'opzione
/Pdisponibile su tutte le versioni di Windows NT con estensioni di comando abilitate e
- choice.exe disponibile per impostazione predefinita su Windows Vista e versioni successive di Windows per utenti PC e su Windows Server 2003 e versioni successive di Windows per server.
set è un comando interno del processore dei comandi di Windows cmd.exe. L'opzione /Pper richiedere una stringa a un utente è disponibile solo con estensioni di comando abilitate che sono abilitate per impostazione predefinita, altrimenti quasi nessun file batch funzionerebbe più al giorno d'oggi.
choice.exe è un'applicazione console separata (comando esterno) situata in %SystemRoot%\System32. choice.exedi Windows Server 2003 può essere copiato nella directory %SystemRoot%\System32su una macchina Windows XP per l'utilizzo su Windows XP come molti altri comandi non disponibili per impostazione predefinita su Windows XP, ma disponibili per impostazione predefinita su Windows Server 2003.
È buona norma favorire l'utilizzo di CHOICE rispetto all'utilizzo di SET / P per i seguenti motivi:
- CHOICE accetta solo chiavi (rispettivamente caratteri letti da STDIN ) specificate dopo l'opzione
/C(eCtrl+C ) ed emette un segnale acustico di errore se l'utente preme un tasto sbagliato.
- SCELTA non richiede la pressione di un tasto diverso da uno di quelli accettabili. SCELTA esce immediatamente quando viene premuto un tasto accettabile mentre SET / P richiede che l'utente termini l'inserimento con RETURNo ENTER.
- È possibile con SCELTA definire un'opzione predefinita e un timeout per continuare automaticamente con l'opzione predefinita dopo alcuni secondi senza attendere l'utente.
- L'output è migliore se si risponde automaticamente al prompt da un altro file batch che chiama il file batch con il prompt usando qualcosa di simile
echo Y | call PromptExample.batall'uso di SCELTA .
- La valutazione della scelta dell'utente è molto più semplice con CHOICE in quanto CHOICE esce con un valore in base al tasto premuto (carattere) che viene assegnato ad ERRORLEVEL che può essere facilmente valutato successivamente.
- La variabile d'ambiente utilizzata su SET / P non è definita se l'utente preme solo il tasto RETURNo ENTERe non è stata definita prima di chiedere all'utente. La variabile di ambiente utilizzata sulla riga di comando SET / P mantiene il suo valore corrente se definito prima e l'utente preme solo RETURNo ENTER.
- L'utente ha la libertà di inserire qualsiasi cosa quando gli viene richiesto con SET / P inclusa una stringa che si traduce in seguito in un'uscita dall'esecuzione del file batch a
cmdcausa di un errore di sintassi, o nell'esecuzione di comandi non inclusi affatto nel file batch o no buon file batch codificato. Ha bisogno di alcuni sforzi per ottenere SET / P sicuro contro l'input dell'utente intenzionalmente sbagliato o errato.
Di seguito è riportato un esempio di prompt che utilizza SCELTA preferita e in alternativa SET / P su choice.exenon disponibile sul computer utilizzato con Windows.
@echo off
echo This is an example for prompting a user.
echo/
if exist "%SystemRoot%\System32\choice.exe" goto UseChoice
setlocal EnableExtensions EnableDelayedExpansion
:UseSetPrompt
set "UserChoice=N"
set /P "UserChoice=Are you sure [Y/N]? "
set "UserChoice=!UserChoice: =!"
if /I "!UserChoice!" == "N" endlocal & goto :EOF
if /I not "!UserChoice!" == "Y" goto UseSetPrompt
endlocal
goto Continue
:UseChoice
%SystemRoot%\System32\choice.exe /C YN /N /M "Are you sure [Y/N]? "
if errorlevel 2 goto :EOF
:Continue
echo So your are sure. Okay, let's go ...
Nota: questo file batch utilizza estensioni dei comandi che non sono disponibili su Windows 95/98 / ME utilizzando command.cominvece che cmd.execome interprete dei comandi.
La riga di comando set "UserChoice=!UserChoice: =!"viene aggiunta per rendere possibile chiamare questo file batch con echo Y | call PromptExample.batsu Windows NT4 / 2000 / XP e non richiede l'utilizzo di echo Y| call PromptExample.bat. Elimina tutti gli spazi dalla stringa letta da STDIN prima di eseguire i due confronti di stringhe.
echo Y | call PromptExample.batfa sìSPACE che Y venga assegnato alla variabile d'ambiente UserChoice. Ciò risulterebbe elaborando il prompt due volte perché "Y "non fa distinzione tra maiuscole e minuscole "N"e "Y"non elimina prima tutti gli spazi. Quindi UserChoicecon YSPACE come valore si otterrebbe l'esecuzione del prompt una seconda volta con l'opzione Ndefinita come predefinita nel file batch alla seconda esecuzione del prompt che successivamente si tradurrà in un'uscita imprevista dell'elaborazione del file batch. Sì, l'uso sicuro di SET / P è davvero complicato, non è vero?
Per ulteriori dettagli sull'utilizzo di SET / P e CHOICE per richiedere all'utente una scelta da un elenco di opzioni, vedere la risposta su Come impedire all'interprete dei comandi di Windows di interrompere l'esecuzione del file batch su un input utente errato?
Alcuni suggerimenti in più:
- IF confronta le due stringhe sinistra e destra dell'operatore di confronto includendo le virgolette doppie. Quindi case-insensitive rispetto non è il valore di
UserChoicecon Ne Y, ma il valore di UserChoicecircondato da ", con "N"e "Y".
- Gli operatori di confronto IF
EQU e NEQsono progettati come primari per confrontare due numeri interi nell'intervallo da -2147483648 a 2147483647 e non per confrontare due stringhe. EQUe NEQfunziona anche per i confronti di stringhe, ma si ottiene confrontando le stringhe tra virgolette su un inutile tentativo di convertire la stringa di sinistra in un intero. EQUe NEQpuò essere utilizzato solo con estensioni di comando abilitate. Gli operatori di confronto per i confronti di stringhe sono ==e not ... ==che funzionano anche con estensioni di comando disabilitate in quanto anche command.comMS-DOS e Windows 95/98 / ME li supportavano già. Per ulteriori dettagli sugli operatori di confronto IF , vedere Simbolo equivalente a NEQ, LSS, GTR, ecc. Nei file batch di Windows .
- Il comando
goto :EOFrichiede estensioni di comando abilitate per uscire realmente dall'elaborazione del file batch. Per maggiori dettagli vedi Dove torna GOTO: EOF?
Per comprendere i comandi utilizzati e come funzionano, apri una finestra del prompt dei comandi, esegui i seguenti comandi e leggi attentamente tutte le pagine della guida visualizzate per ciascun comando.
choice /?
echo /?
endlocal /?
goto /?
if /?
set /?
setlocal /?
Guarda anche:
SET AREYOUSURE=Nprima del prompt per cancellare la scelta se hai già eseguito lo script prima in quella finestra di comando. Senza di essa il valore predefinito rimarrà la scelta precedentemente selezionata.