2017-06-12 76 views
0

感謝您查看我的查詢。 我有Tomcat安裝爲服務名稱爲'Tomcat8'的Windows服務。 我想通過批量文件查詢windows服務來獲取tomcat路徑。如何從Windows服務通過批處理文件找到Tomcat路徑

你能否建議如何從Windows服務獲取Tomcat8路徑。

我試過了嗎? 我嘗試下面的方法通過使用REG查詢

命令:

reg query "HKLM\System\CurrentControlSet\Services\Tomcat8" /v "ImagePath" 

輸出:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tomcat8 
ImagePath REG_EXPAND_SZ C:\apache-tomcat-8.5.15\bin\tomcat8.exe //RS// Tomcat8 

但是,這個命令是不會放棄絕對路徑。我想獲得tomcat的絕對路徑(例如:C:\ apache-tomcat-8.5.15)。

+0

...但絕對路徑是'C:\ apache-tomcat-8.5.15 \ bin \ tomcat8.exe';它的位置是'C:\ apache-tomcat-8.5.15 \ bin'。你能否澄清你的要求? – Compo

回答

1
@ECHO OFF 
SETLOCAL 

FOR /f "delims=/" %%a IN ('reg query "HKLM\System\CurrentControlSet\Services\Tomcat8" /v "ImagePath"') DO (
FOR /f "tokens=1,2,*delims= " %%b IN ("%%a") DO IF "%%b"=="ImagePath" (
    FOR %%m IN ("%%~dpd.") DO ECHO %%~dpm 
) 
) 

GOTO :EOF 

服用reg query命令的輸出,取就行了(默認)的第一個令牌,但設置delims/去除出現在那裏(因爲它是//後鬆餅......然後它將被分配給第二個令牌,如果它已被指定)

再次令牌結果,這次使用空格作爲分隔符並分別選擇第一個,第二個和其餘的行至%%b .. %%d。對%%b中的關鍵字符串進行門控以確保僅處理該行;可執行文件的文件名出現在%%d。選擇驅動器和路徑,結束時彈出.,以便解析器將bin看作文件名,並選擇驅動器&結果路徑。

+0

非常感謝您使用解決方案做出及時響應。 –

0

您的reg query命令行確實會返回Tomcat8可執行文件的絕對路徑。你似乎想要得到它的祖父目錄。

首先,我們需要捕獲req query命令線的輸出,採用了for /F循環:

for /F "skip=1 delims" %%R in (' 
    reg query "HKLM\System\CurrentControlSet\Services\Tomcat8" /V "ImagePath" 
') do set "RVAL=%%R" 

此跳過頭和捕獲整個行,然後:

ImagePath REG_EXPAND_SZ C:\apache-tomcat-8.5.15\bin\tomcat8.exe //RS// Tomcat8 

接下來的事情是刪除前導值的名稱和類型分隔四個連續SPACE,並尾隨東西SPACE + //RS// + SPACE

set "RVAL=%RVAL:* =%" 
set "RVAL=%RVAL:* =%" 
set "RVAL=%RVAL: //RS// =" & rem "%" 

現在讓我們追加\..我們希望在目錄層次上去多次:

set "RVAL=%RVAL%\..\.." 

最後,爲了解決這個問題,一個for環是最合適的工具:

for %%R in ("%RVAL%") do set "RVAL=%%~fR" 

這只是一個美觀的事情,因爲C:\apache-tomcat-8.5.15\bin\tomcat8.exe\..\..在功能上等同於C:\apache-tomcat-8.5.15

相關問題