Für Benutzeransagen in der Windows-Befehlszeile stehen zwei Befehle zur Verfügung:
- Set mit Option
/P
für alle Windows NT-Versionen mit aktivierten Befehlserweiterungen und
- choice.exe ist standardmäßig unter Windows Vista und späteren Windows-Versionen für PC-Benutzer sowie unter Windows Server 2003 und späteren Serverversionen von Windows verfügbar.
einstellen ist ein interner Befehl des Windows-Befehlsprozessors cmd.exe
. Die Option /P
, einen Benutzer zur Eingabe einer Zeichenfolge aufzufordern, ist nur mit aktivierten Befehlserweiterungen verfügbar, die standardmäßig aktiviert sind, da sonst fast keine Batchdatei mehr funktionieren würde.
choice.exe ist eine separate Konsolenanwendung (externer Befehl) in %SystemRoot%\System32
.choice.exe
von Windows Server 2003 kann %SystemRoot%\System32
zur Verwendung unter Windows XP in ein Verzeichnis auf einem Windows XP-Computer kopiert werden, wie viele andere Befehle, die unter Windows XP nicht standardmäßig, unter Windows Server 2003 jedoch standardmäßig verfügbar sind.
Es wird empfohlen, die Verwendung von CHOICE der Verwendung von SET / P vorzuziehen aus folgenden Gründen :
- CHOICE akzeptiert nur Schlüssel (bzw. aus STDIN gelesene Zeichen ), die nach der Option angegeben wurden
/C
(und Ctrl+C) angegeben wurden, und gibt einen Fehlerton aus, wenn der Benutzer eine falsche Taste drückt.
- Für CHOICE muss keine andere Taste als eine der zulässigen gedrückt werden. CHOICE wird sofort beendet, sobald eine akzeptable Taste gedrückt wird, während SET / P erfordert, dass der Benutzer die Eingabe mit RETURNoder beendetENTER .
- Es ist möglich mit CHOICE , eine Standardoption und ein Timeout zu definieren, um nach einigen Sekunden automatisch mit der Standardoption fortzufahren, ohne auf den Benutzer zu warten.
- Die Ausgabe ist besser, wenn die Eingabeaufforderung automatisch aus einer anderen Batchdatei beantwortet wird, die die Batchdatei mit der Eingabeaufforderung mit etwas wie
echo Y | call PromptExample.bat
bei Verwendung aufruft aufruft, beispielsweise CHOICE .
- Die Bewertung der Auswahl des Benutzers ist mit CHOICE viel einfacher, da CHOICE mit einem Wert entsprechend der gedrückten Taste (Zeichen) beendet wird, die ERRORLEVEL zugewiesen ist ist und als nächstes leicht ausgewertet werden kann.
- Die in SET / P verwendete Umgebungsvariable ist nicht definiert, wenn der Benutzer nur die Taste drückt RETURNoder ENTERund sie wurde nicht definiert, bevor der Benutzer dazu aufgefordert wurde. Die verwendete Umgebungsvariable in der SET / P- Befehlszeile behält ihren aktuellen Wert bei, wenn sie zuvor definiert wurde, und der Benutzer drückt nur RETURNoderENTER .
- Der Benutzer hat die Freiheit, bei Aufforderung mit SET / P alles einzugeben, einschließlich einer Zeichenfolge, die später
cmd
aufgrund eines Syntaxfehlers zum Beenden der Ausführung der Batchdatei führt, oder zur Ausführung von Befehlen, die in der Batchdatei überhaupt nicht enthalten sind gut codierte Batch-Datei. Es bedarf einiger Anstrengungen, um SET / P zu erhalten gegen versehentliche oder absichtlich falsche Benutzereingaben zu schützen.
Hier ist ein Beispiel für eine Eingabeaufforderung mit bevorzugter WAHL und alternativ SET / P ein choice.exe
, das auf einem verwendeten Computer unter Windows nicht verfügbar ist.
@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 ...
Hinweis: Diese Batchdatei verwendet Befehlserweiterungen, die unter Windows 95/98 / ME nicht verfügbar sindcommand.com
anstelle von cmd.exe
als Befehlsinterpreter.
Die Befehlszeile set "UserChoice=!UserChoice: =!"
wird hinzugefügt, um das Aufrufen dieser Batchdatei unter echo Y | call PromptExample.bat
Windows NT4 / 2000 / XP zu ermöglichen, ohne dass die Verwendung von erforderlich ist echo Y| call PromptExample.bat
. Es löscht alle Leerzeichen aus der Zeichenfolge, aus der gelesen wird STDIN Zeichenfolge, bevor die beiden Zeichenfolgenvergleiche ausgeführt werden.
echo Y | call PromptExample.bat
führt dazu, dass YSPACE der Umgebungsvariablen zugewiesen wird UserChoice
. Dies würde dazu führen, dass die Eingabeaufforderung zweimal verarbeitet wird, da "Y "
weder die Groß- und Kleinschreibung gleich ist, "N"
noch "Y"
ohne zuerst alle Leerzeichen zu löschen. So UserChoice
mit YSPACE als Wert bei der Führung das prompt ein zweites Mal mit der Option würde N
als als Standard in der Batch - Datei auf dem zweiten prompte Ausführung des nächste zu einem unerwarteten Ausgang der Stapelverarbeitung definiert. Ja, die sichere Verwendung von SET / P ist wirklich schwierig, nicht wahr?
Weitere Informationen zur Verwendung von SET / P und CHOICE, um den Benutzer zur Auswahl aus einer Liste von Optionen aufzufordern , finden Sie unter Antwort auf So verhindern Sie, dass der Windows-Befehlsinterpreter die Ausführung von Batchdateien bei einer falschen Benutzereingabe beendet.
Noch ein paar Hinweise:
- IF vergleicht die beiden Strings mit und rechts des Vergleichsoperator links einschließlich die doppelten Anführungszeichen. Der Vergleich zwischen Groß- und Kleinschreibung ist also nicht der Wert von
UserChoice
mit N
und Y
, sondern der Wert von UserChoice
umgeben von "
mit "N"
und "Y"
.
- Die IF- Vergleichsoperatoren
EQU
und NEQ
sind primär für den Vergleich zweier Ganzzahlen im Bereich von -2147483648 bis 2147483647 und nicht für den Vergleich zweier Zeichenfolgen ausgelegt. EQU
und NEQ
funktionieren auch für Zeichenfolgenvergleiche, führen jedoch zum Vergleichen von Zeichenfolgen in doppelten Anführungszeichen bei einem nutzlosen Versuch, die linke Zeichenfolge in eine Ganzzahl umzuwandeln. EQU
und NEQ
kann nur mit aktivierten Befehlserweiterungen verwendet werden. Die Vergleichsoperatoren für Zeichenfolgenvergleiche sind ==
und not ... ==
funktionieren auch mit deaktivierten Befehlserweiterungen, da sie auch command.com
von MS-DOS und Windows 95/98 / ME bereits unterstützt werden. Weitere Informationen zu IF- Vergleichsoperatoren finden Sie unter Symbol, das NEQ, LSS, GTR usw. in Windows-Batchdateien entspricht .
- Der Befehl
goto :EOF
erfordert aktivierte Befehlserweiterungen, um die Batchdateiverarbeitung wirklich zu beenden. Weitere Informationen finden Sie unter Wohin kehrt GOTO: EOF zurück?
Um die verwendeten Befehle und ihre Funktionsweise zu verstehen, öffnen Sie ein Eingabeaufforderungsfenster, führen Sie dort die folgenden Befehle aus und lesen Sie alle Hilfeseiten, die für jeden Befehl angezeigt werden, sorgfältig durch.
choice /?
echo /?
endlocal /?
goto /?
if /?
set /?
setlocal /?
Siehe auch:
SET AREYOUSURE=N
vor der Eingabeaufforderung, um die Auswahl zu löschen, wenn Sie das Skript bereits zuvor in diesem Befehlsfenster ausgeführt haben. Ohne diese Option bleibt die Standardeinstellung die zuvor ausgewählte Auswahl.