2017-04-04 40 views
0

我定義變量,如:行情在變量 - 比較和替代

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% 

下一個代碼,我不能改變:(從catalina.bat中文件的距離的Apache Tomcat)

if not "%LOGGING_MANAGER%" == "" ... 

這個if語句將失敗,因爲變量包含引號。

在那裏,我有2個問題之一:

  1. if語句失敗(出錯)。
  2. 沒有引號時,替換爲java程序有問題(空格是分隔符)。

如何更改變量定義,使路徑可能包含空格,如果語句正常工作?

+4

'如果定義LOGGING_MANAGER'? –

+0

我不能更改該代碼:( 我想更改變量defenition – learp

+0

@MCND忘記提及你 – learp

回答

1

note:未經測試,但在閱讀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%變量的第二次迭代。

+0

非常感謝你!我發現了EnableDelayedExpansion參數,可能它會有幫助,而且會很容易嗎?我稍後嘗試一下。 – learp

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:是一個未使用的驅動器。

+0

我認爲這個解決方案的兩個問題(很好的一點,好點)可能是:** a **)沒有短名稱(可以配置)** b **) OS決定某個中間文件夾不需要生成短名稱,但它包含一個特殊字符。 –

+0

@Magoo感謝您的答案,但它不工作:(行爲就像我將定義的變量設置爲LOGGING_MANAGER = ...%CATALINA_HOME%\ conf \ logback.xml(不含引號) – learp

+0

@Magoo在您的定義打印後回顯 - Djuli-logback.configurationFile = file:C:\ xyz \ Tomcat \ tomcat \ conf \ logback.xml(不含引號或任何內容) – learp