Mi chiedo se esiste un modo semplice per eseguire l'esecuzione in un file batch di Windows in base al valore di una singola espressione. Qualcosa simile a switch/case block in C, C++, C#, Java, Javascript, PHP e altri linguaggi di programmazione reali.equivalente in file batch di Windows
La mia unica soluzione è una pianura se/blocco else in cui la stessa espressione viene ripetutamente controllato per l'uguaglianza contro valori diversi:
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...
)
così stupido. Qualche soluzione migliore?
Un altro modo (anche se mi viene da suggerire Goto!) .... è possibile creare etichette ': ID1': ID2' ecc. Ma il modo in cui lo stai già facendo non è poi così terribile, vero? Sono sicuro che ci sono altri linguaggi in cui l'intera espressione si trova su ogni caso/linea di commutazione. –
Ricordare che in molte lingue è presente un'istruzione 'switch' (questo è vero per C e C++) che il costrutto viene utilizzato per scopi di ottimizzazione della velocità, poiché evita il confronto ripetuto della catena if-else-if, che può essere costoso. Di solito non esiste un ** grande ** guadagno di leggibilità nell'uso di 'switch' in questo caso, poiché i confronti concatenati non sono così brutti (basta confrontare una costante). Spero che la tua domanda sia motivata dalla curiosità e che tu non voglia veramente ottimizzare la velocità di un file batch! :-) ;-) –
@LorenzoDonati Non mi sto lamentando della leggibilità del costrutto 'IF' /' ELSE' (che è apparso leggibile?). Penso solo che non sia intelligente ed incline agli errori a scrivere codice simile più volte. E no, non ti preoccupare ... anche la velocità non è una preoccupazione :-) Sono solo curioso perché ho incontrato questo tipo di problemi molte volte durante la codifica degli script batch. –