[英]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.