簡體   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