Zweck:Auswahl der auszuführenden Befehle in einer Stapeldatei auf der Grundlage eines Wertes

 

Format:SWITCH expression

CASE value1 [.OR. value2 [.OR. value3 ...]]

[commands]

CASE value4

[commands]

CASEALL

[commands]

[DEFAULT

commands]

ENDSWITCH

 

expressionEine Umgebungsvariable, interne Variable, Variablenfunktion, Textzeichenfolge oder eine Kombination dieser Elemente, die zur Auswahl einer Gruppe von Befehlen verwendet wird.
value1, value2 Einzu prüfender Wert oder mehrere mit .ORverbundene Werte .
commandsEin oder mehrere Befehle, die ausgeführt werden sollen, wenn der Ausdruck mit dem Wert übereinstimmt. Wenn Sie mehrere Befehle verwenden, müssen diese durch Befehlstrennzeichen getrennt sein oder in separaten Zeilen einer Batch-Datei stehen.

 

Siehe auch: IF und IFF.

 

Verwendung:

 

SWITCH kann nur in Batchdateien verwendet werden. Mit diesem Befehl können Sie einen Befehl oder eine Gruppe von Befehlen auswählen, die auf der Grundlage der möglichen Werte einer Variablen oder einer Kombination aus Variablen und Text ausgeführt werden sollen.

 

Auf den SWITCH-Befehl folgt immer ein Ausdruck , der aus Umgebungsvariablen, internen Variablen, Variablenfunktionen und Textstrings gebildet wird, dann eine Folge von CASE-Anweisungen, die den möglichen Werten des Ausdrucksentsprechen , eine optionale DEFAULT-Anweisung und zum Schluss eine ENDSWITCH-Anweisung. Auf jede CASE-Anweisung und die DEFAULT-Anweisung können ein oder mehrere Befehle folgen.

 

TCC wertet den Ausdruck aus  und vergleicht ihn sequentiell mit der Liste der Werte in den CASE-Anweisungen, beginnend mit dem ersten Wert. Die Vergleichsregeln sind die gleichen, die für den Vergleichsoperator EQ verwendet werden ; siehe Numerische und String-Vergleiche für Details. Wird eine Übereinstimmung gefunden, werden  die Befehle ausgeführt, die auf die übereinstimmende CASE-Anweisung folgen, und die Batch-Datei wird mit den Befehlen fortgesetzt, die auf ENDSWITCH folgen. Wenn es Übereinstimmungen in nachfolgenden CASE-Anweisungen gibt, werden diese ignoriert. Der Wert in einer CASE-Anweisung kann aus Literalen, Variablen oder Funktionen bestehen (die vor dem Vergleich mit dem SWITCH-Ausdruck expandiert werden).

 

CASE-Anweisungen können Wildcards und reguläre Ausdrücke enthalten.

 

Die optionale Anweisung CASEALL sollte allen CASE-Anweisungen folgen, aber vor DEFAULT stehen. Wenn ein vorangegangener CASE-Block ausgeführt wurde, wird auch CASEALL ausgeführt; andernfalls wird er ignoriert.

 

Wirdbei der Suche nach einer Übereinstimmung die DEFAULT-Anweisung angetroffen,  werdendie  darauf folgendenBefehle ausgeführt, und die Batch-Datei wird mit den Befehlen fortgesetzt, die auf ENDSWITCH folgen. Alle CASE-Anweisungen nach der DEFAULT-Anweisung werden ignoriert.

 

SWITCH-Befehle können verschachtelt werden.

 

Sie können die gesamte SWITCH / ENDSWITCH-Verarbeitung beenden, indem Sie GOTO bis zu einer Zeile nach dem letzten ENDSWITCHverwenden .

 

Beschränkungen

 

Jede SWITCH-, CASE-, DEFAULT- und ENDSWITCH-Anweisung muss in einer eigenen Zeile stehen und darf nicht von einem Befehlstrennzeichen gefolgt werden. (Dies ist der Grund, warum SWITCH nicht in Aliasen verwendet werden kann.) Es gibt keine Einschränkung für die Verwendung von Gruppierungen und Befehlstrennzeichen in den Befehlen für CASE oder DEFAULT.

 

Sie können eine Liste von Werten in einer einzigen CASE-Anweisung mit .OR. verknüpfen, aber nicht mit .AND. oder .XOR.

 

Beispiele:

 

Das folgende Batchdateifragment zeigt eine Meldung an, wenn der Benutzer Adrückt , eine weitere, wenn der Benutzer B oder C drückt , und eine dritte, wenn der Benutzer eine beliebige andere Taste drückt:

 

inkey Enter a keystroke: %%key

switch %key

case A

echo It's an A

case B .or. C

echo It's either B or C

default

echo It's none of A, B, or C

endswitch

 

Im obigen Beispiel wurde der Wert einer einzelnen Umgebungsvariablen als Ausdruckverwendet . Sie können jedoch bei Bedarf auch andere Arten von Ausdrücken verwenden. Die erste SWITCH-Anweisung unten wählt einen auszuführenden Befehl auf der Grundlage der Länge einer Variablen aus, und die zweite basiert die Aktion auf einer in Anführungszeichen gesetzten Textzeichenfolge, die in einer Umgebungsvariablen gespeichert ist:

 

switch %@len[%var1]

case 0

echo Missing var1

case 1

echo Single character

...

endswitch

 

 

switch "%string1"

case "This is a test"

echo Test string

case "The quick brown fox"

echo It's the fox

...

endswitch