windows - ved hjælp af ')' inden for hvis/ellers udtalelser i batch-filer

Indlæg af Hanne Mølgaard Plasc

Problem



Her er snippet som ikke fungerer som forventet:


set MYMACHINENAME=BuildmasterW32

if "\%MYMACHINENAME\%"=="BuildmasterW32" (
    set PROGRAMFILESDIR=D:Program Files
    set WISEDIR=D:Program FilesWise Installation StudioWiseScript Package Editor
) 

if "\%MYMACHINENAME\%"=="BuildmasterW64" (
    set PROGRAMFILESDIR=C:Program Files (x86)
    set WISEDIR="C:Program Files (x86)Wise Installation StudioWiseScript Package Editor"
)

set WISEDIR
rem we see `C:Program Files (x86)Wise Installation StudioWiseScript Package Editor` at this point
pause


Jeg forventer at se værdien D:Program Files... i stedet.


Årsagen er, at den lukkende parentes i den foregående linje, der angiver PROGRAMFILESDIR, lukker betingelsesopgørelsen, og værdien af ​​WISEDIR bliver overskrevet.


Hvis jeg vedlægger værdien for PROGRAMFILESDIR med dobbelt citater, fungerer koden rigtigt, MEN PROGRAMFILESDIR bliver lig med "C:Program Files (x86)" (citaterne går til variablen) og ikke C:Program Files (x86) som jeg har brug for. Det er ikke det, jeg vil have, fordi PROGRAMFILESDIR er et præfiks, hvortil relativ stier tilføjes senere, så der må ikke være nogen citater i værdien.


Jeg forsøgte at tilføje et tilbageslag inden ) i PROGRAMFILESDIR-tildelingslinjen, men det synes ikke at have nogen virkning.


Er der nogen løsning inden for det uddrag, jeg har givet, eller jeg skulle omskrive den for at bruge goto i stedet for hvis/ellers?

Bedste reference


Du er nødt til at undslippe parentesen:


if /i "\%MYMACHINENAME\%"=="BuildmasterW64" (
    set PROGRAMFILESDIR=C:Program Files ^(x86^)
    set WISEDIR="C:Program Files ^(x86^)Wise Installation StudioWiseScript Package Editor"
    )


Åh, og tilføj /I for at gøre sammenligningen tilfældig.

Andre referencer 1


I stedet for at citere værdien, citerer du opgaveoperationen


set "MYMACHINENAME=BuildmasterW32"

if "\%MYMACHINENAME\%"=="BuildmasterW32" (
    set "PROGRAMFILESDIR=D:Program Files"
    set "WISEDIR=D:Program FilesWise Installation StudioWiseScript Package Editor"
) 

if "\%MYMACHINENAME\%"=="BuildmasterW64" (
    set "PROGRAMFILESDIR=C:Program Files (x86)"
    set "WISEDIR=C:Program Files (x86)Wise Installation StudioWiseScript Package Editor"
)

set WISEDIR
pause