Ich frage mich, ob es eine einfache Möglichkeit gibt, die Ausführung in einer Windows-Batch-Datei abhängig von dem Wert eines einzelnen Ausdrucks verzweigen. Ähnlich wie Wechsel/Case-Blöcke in C, C++, C#, Java, Javascript, PHP und anderen realen Programmiersprachen.Switch-Anweisung entspricht in Windows-Batch-Datei
Meine einzige Lösung ist eine einfache if/else Block, in dem der gleiche Ausdruck wiederholt auf Gleichheit mit unterschiedlichen Werten geprüft:
IF "%ID%"=="0" (
REM do something
) ELSE IF "%ID%"=="1" (
REM do something else
) ELSE IF "%ID%"=="2" (
REM do another thing
) ELSE (
REM default case...
)
So stumm. Jede bessere Lösung?
Eine andere Möglichkeit (obwohl ich zusammenzucken, um Goto vorzuschlagen!) .... Sie können Label ': ID1'': ID2' usw. erstellen, und eine 'Goto ID% ID%' sollte zum entsprechenden springen. Aber die Art, wie du es schon machst, ist nicht so schrecklich, oder? Ich bin mir sicher, dass es andere Sprachen gibt, in denen der gesamte Ausdruck auf jedem Fall/jeder Schalterlinie steht. –
Beachten Sie, dass in vielen Sprachen, die eine 'switch'-Anweisung haben (dies gilt für C und C++ zumindest), dieses Konstrukt für Geschwindigkeitsoptimierungszwecke verwendet wird, da es den wiederholten Vergleich der if-else-if-Kette vermeidet. Das kann teuer sein. Gewöhnlich gibt es in diesem Fall keine ** große ** Lesbarkeitsgewinne bei Verwendung von "switch", da die verketteten Vergleiche nicht so hässlich sind (man vergleicht nur mit einer Konstanten). Ich hoffe, dass Ihre Frage durch Neugierde ausgelöst wird und Sie nicht wirklich eine Batch-Datei optimieren möchten! :-) ;-) –
@LorenzoDonati Ich beschwere mich nicht über die Lesbarkeit des 'IF' /' ELSE' Konstrukts (wer kam auf Lesbarkeit?). Ich denke nur, dass es nicht schlau und fehleranfällig ist, ähnlichen Code mehrmals zu schreiben. Und nein, mach dir keine Sorgen ... Geschwindigkeit ist auch kein Problem :-) Ich bin nur neugierig, weil ich bei der Codierung von Batch-Skripten oft auf diese Art von Problemen gestoßen bin. –