我将变量定义为:
set LOGGING_MANAGER=-Djuli-logback.configurationFile=file:"%CATALINA_HOME%\conf\logback.xml"
请注意,我将%CATALINA_HOME%\ conf \ logback.xml包装在双引号中,因为path可能包含空格。在执行步骤中,此变量将替换为java程序。
Example of substitution:
path_to_jre/java.exe %LOGGING_MANAGER%
下一个代码我无法改变:(来自Apache Tomcat的catalina.bat文件)
if not "%LOGGING_MANAGER%" == "" ...
此if语句将失败,因为变量包含引号。
我有两个问题之一:
如何更改变量定义以使路径可以包含空格,if语句可以正常工作?
答案 0 :(得分:1)
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:是未使用的驱动器。
答案 1 :(得分:1)
注意:未经过测试,但在阅读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
IF ,用户尚未对其进行初始化(来自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%
变量