[英]Quotes in variable - comparison and substitution
我定义如下变量:
set LOGGING_MANAGER=-Djuli-logback.configurationFile=file:"%CATALINA_HOME%\conf\logback.xml"
注意,我将%CATALINA_HOME%\\ conf \\ logback.xml括在双引号中,因为路径可能包含空格。 并且在执行步骤中,此变量将替代Java程序。
Example of substitution:
path_to_jre/java.exe %LOGGING_MANAGER%
我无法更改的下一个代码:(来自Apache Tomcat的catalina.bat文件)
if not "%LOGGING_MANAGER%" == "" ...
如果变量包含引号,则此if语句将失败。
那里我有两个问题之一:
如何更改变量定义,以便路径可以包含空格,并且if语句可以正常工作?
for %%a in ("%CATALINA_HOME%\conf\logback.xml") do set "LOGGING_MANAGER=-Djuli-logback.configurationFile=file:%%~sa"
应该适当地设置logging_manager
这样您就不必“引用文件名”
for %%a in ("%CATALINA_HOME%\conf") do net use o: "\\%userdomain%\sharenameforthedrivewherecatalina_homeisresident%%~pa"
set "LOGGING_MANAGER=-Djuli-logback.configurationFile=file:o:\conf\logback.xml"
可能也可以工作-如果您知道catalina_home所在的驱动器的共享名,并假定o:是未使用的驱动器。
注意 :未测试,但是在阅读了catalina.bat
之后,这是一种解决问题的方法。
如果从批处理文件运行此文件,则可以使用
set LOGGING_MANAGER_FILE="%CATALINA_HOME%\conf\logback.xml"
set LOGGING_MANAGER=-Djuli-logback.configurationFile=file:%%LOGGING_MANAGER_FILE%%
set _RUNJAVA=CALL "%JRE_HOME%\bin\java.exe"
call catalina.bat
它的作用是
LOGGING_MANAGER
变量。 由于不会扩展,因此LOGGING_MANAGER
变量的最终内容为-Djuli-logback.configurationFile=file:%LOGGING_MANAGER_FILE%
这样,当执行if "%LOGGING_MANAGER%"=="" ...
,不会有任何问题。
现在set _RUNJAVA
行。 在catalina.bat
内部, _RUNJAVA
的内容用于初始化将启动服务器的_EXECJAVA
变量。 _RUNJAVA
在初始化setclasspath.bat
如果它没有被用户(从代码初始化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%\bin\java.exe"
默认值为"%JRE_HOME%\\bin\\java.exe"
,我们只是在强制执行批处理解析器的第二次迭代之前添加了CALL
批处理命令,该迭代器将在最终命令行中扩展带引号的%LOGGING_MANAGER_FILE%
变量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.