windows - Citater i variabel - sammenligning og substitution

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg definerer variabel som:


set LOGGING\_MANAGER=-Djuli-logback.configurationFile=file:"\%CATALINA\_HOME\%conflogback.xml"


Bemærk, at jeg pakker\% CATALINA\_HOME\% \ conf \ logback.xml i dobbelt citater, fordi stien kan indeholde mellemrum. Og ved udførelsestrin erstattes denne variabel med java-programmet.


Example of substitution:
path\_to\_jre/java.exe \%LOGGING\_MANAGER\%


Næste kode Jeg kan ikke ændre: (det er fra katalina.bat-fil fra Apache Tomcat)


if not "\%LOGGING\_MANAGER\%" == "" ...


Dette hvis sætning vil mislykkes, fordi variabel indeholder citater.


Der har jeg en af ​​2 problemer:



  1. hvis sætningen mislykkes (fejl opstod).

  2. uden citater, når du erstatter java-programmet, har problemer (plads er afgrænser).



Hvordan kan jeg ændre variabel definition, så stien kan indeholde mellemrum, og hvis sætningen vil fungere fint?

Bedste reference


note : Ikke testet, men efter at have læst catalina.bat er det en måde at håndtere problemet på.


Hvis du kører dette fra en batchfil, kan du bruge


set LOGGING\_MANAGER\_FILE="\%CATALINA\_HOME\%conflogback.xml"
set LOGGING\_MANAGER=-Djuli-logback.configurationFile=file:\%\%LOGGING\_MANAGER\_FILE\%\%
set \_RUNJAVA=CALL "\%JRE\_HOME\%injava.exe"

call catalina.bat


Hvad det gør er



  • Gem filnavnet med citater i en separat variabel

  • Indstil variablen LOGGING\_MANAGER ved hjælp af en undtaget reference fra den foregående variabel. Da det ikke vil blive udvidet, er det endelige indhold af variablen LOGGING\_MANAGER -Djuli-logback.configurationFile=file:\%LOGGING\_MANAGER\_FILE\%



På den måde, når if "\%LOGGING\_MANAGER\%"=="" ... udføres, vil der ikke være noget problematisk citat.


Og nu linjen set \_RUNJAVA. Inde i catalina.bat bruges indholdet af \_RUNJAVA til at initialisere variablen \_EXECJAVA, der vil starte serveren. \_RUNJAVA initialiseres i setclasspath.bat IF . Det er ikke initialiseret af brugeren (kode fra setclasspath.bat).


rem Don't override \_RUNJAVA if the user has set it previously
if not "\%\_RUNJAVA\%" == "" goto gotRunJava
rem Set standard command for invoking Java.
rem Also note the quoting as JRE\_HOME may contain spaces.
set \_RUNJAVA="\%JRE\_HOME\%injava.exe"


Standardværdien er "\%JRE\_HOME\%injava.exe", vi tilføjer blot en CALL batch-kommando før for at tvinge en anden iteration af batchparseren, der vil udvide den citerede \%LOGGING\_MANAGER\_FILE\% -variabel i den endelige kommandolinje.

Andre referencer 1


for \%\%a in ("\%CATALINA\_HOME\%conflogback.xml") do set "LOGGING\_MANAGER=-Djuli-logback.configurationFile=file:\%\%~sa"


skal indstille logging\_manager korrekt, så du ikke behøver at 'citere filnavnet'





for \%\%a in ("\%CATALINA\_HOME\%conf") do net use o: "\\%userdomain\%sharenameforthedrivewherecatalina\_homeisresident\%\%~pa"

set "LOGGING\_MANAGER=-Djuli-logback.configurationFile=file:o:conflogback.xml"


kan også arbejde - hvis du kender navnet på drevet, hvor catalina\_home er hjemmehørende og antager o: er et ubrugt drev.