繁体   English   中英

变量中的引号-比较和替换

[英]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语句将失败。

那里我有两个问题之一:

  1. 如果语句失败(发生错误)。
  2. 替代java程序时遇到问题(空格是定界符)时,不带引号。

如何更改变量定义,以便路径可以包含空格,并且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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM