2017-06-12 86 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

相关问题