windows - Sådan bruges ELSE-sætning i .bat-fil, der har flere IF-udsagn?

Indlæg af Hanne Mølgaard Plasc

Problem




    Dette spørgsmål er en nøjagtig kopi af:

    

            

  •             Sådan bruges en If-erklæring i .bat-fil til at køre en af ​​flere muligheder [[duplikat]]
            

  •     

Bedste reference




Ken White har allerede vist dig den perfekte løsning i hans svar. /questions/41833230/how-to-use-an-if-statement-in-bat-file-to-run-one-of-multiple-options


Jeg vil gerne vise dig, hvor kompliceret det var, hvis du virkelig ønskede at bruge else klausuler.

Lad os holde os til følgende kode:


if /I "\%c\%" EQU "A"  goto :automatic
if /I "\%c\%" EQU "M"  goto :manual
if /I "\%c\%" EQU "D"  goto :disabled
echo Wrong user input!



  1. Separate if/else udsagn:


    Parenteserne er obligatoriske :message blokken kan være et andet sted i scriptet:


    if /I "\%c\%" EQU "A"  goto :automatic
    if /I "\%c\%" EQU "M"  goto :manual
    if /I "\%c\%" EQU "D" (goto :disabled) else goto :message
    
    :message
    echo Wrong user input!
    

  2. Nested if/else erklæringer:


    if /I "\%c\%" EQU "A" (goto :automatic) else (
        if /I "\%c\%" EQU "M" (goto :manual) else (
            if /I "\%c\%" EQU "D" (goto :disabled) else (
                echo Wrong user input!
            )
        )
    )
    


    Eller skrevet på en anden måde:


    if /I "\%c\%" EQU "A" (
        goto :automatic
    ) else if /I "\%c\%" EQU "M" (
        goto :manual
    ) else if /I "\%c\%" EQU "D" (
        goto :disabled
    ) else (
        echo Wrong user input!
    )
    


    Eller mere kompakt:


    if /I "\%c\%" EQU "A" (goto :automatic
    ) else if /I "\%c\%" EQU "M" (goto :manual
    ) else if /I "\%c\%" EQU "D" (goto :disabled
    ) else echo Wrong user input!
    



Som du kan se, er Ken Whites løsning stadig den enkleste og mest læselige.





Forresten foreslog Squashman et meget godt alternativ, nemlig kommandoen choice: [28]


choice /C AMD /N /M "Select mode - [A]utomatic, [M]anual or [D]isabled: "
if ErrorLevel 3 goto :disabled
if ErrorLevel 2 goto :manual
if ErrorLevel 1 goto :automatic
goto :eof

Andre referencer 1


Bare at tilføje en anden goto uden en betingelse vil fungere:


if /I "\%c\%" EQU "A"  goto :automatic
if /I "\%c\%" EQU "M"  goto :manual
if /I "\%c\%" EQU "D"  goto :disabled
goto :ErrorInfo


Hvis ingen af ​​de tre første er acceptable, falder koden gennem til den sidste, hvilket vil føre dem til den kode, du vil udføre, hvis en uacceptabel værdi blev indtastet (eller slet ingen).

Andre referencer 2


Evaluering af enkeltbogstavs brugerindgang kan aflæses, hvis du tilføjer brevet (e) til et etiketpræfix og tjekker aginst et givet sæt:


@Echo off
:Cont
Set MSG="Press [A]utomatic, [M]anual or [D]isabled :"
Set Choices=AMD
Set /P c=\%MSG\%
Echo:\%Choices\%|Find /i "\%c:~0,1\%" >NUL 2>&1 && Goto :Choice\%c\% || Goto :BadChoice

:Badchoice
Echo \%c\% is a bad choice
Goto :Cont

:ChoiceA
Echo ChoiceA
Goto :Cont

:ChoiceM
Echo ChoiceM
Goto :Cont

:ChoiceD
Echo ChoiceD
Goto :Cont


Eller meget lignende inkorporerer Squashman s forslag med choice.exe (her også med 10 sekunders timeout på første bogstav):


@Echo off&Setlocal EnableDelayedExpansion
:Cont
Set MSG="Press [A]utomatic, [M]anual or [D]isabled :"
Set Choices=AMD
CHOICE /C \%Choices\% /T 10 /D \%Choices:~0,1\% /M \%MSG\%
Set /A \_=\%Errorlevel\% - 1
If \%\_\% lss 255 Goto :Choice!Choices:~\%\_\%,1!

:Badchoice
Echo \%c\% is a bad choice
Goto :Cont

:ChoiceA
Echo ChoiceA
Goto :Cont

:ChoiceM
Echo ChoiceM
Goto :Cont

:ChoiceD
Echo ChoiceD
Goto :Cont

Andre referencer 3


Jeg synes, det er den enkleste måde:


setlocal EnableDelayedExpansion
set "options=AMD"


if "!options:\%c\%=!" neq "\%options\%" (
   goto :option-\%c\%
) else (
   goto badOption
)


:option-A automatic
echo Automatic
goto continue

:option-M manual
echo Manual
goto continue

:option-D disabled
echo Disabled
goto continue


For det første er en streng med gyldige indstillinger defineret. Derefter kontrollerer kommandoen if, om \%c\% er en af ​​disse muligheder; Hvis svaret er Ja, går kommandoen goto :option-\%c\% direkte til den ønskede etiket uden brug af yderligere if. Denne metode er meget effektiv, specielt hvis der er mange forskellige muligheder. Hvis du vil tilføje flere muligheder, skal du blot tilføje bogstaver til strengen, ikke yderligere if kommandoer.