如何通过批处理文件从Windows服务中找到Tomcat路径



感谢您查看我的查询。我已将tomcat安装为Windows服务,服务名称为" Tomcat8"。我想通过批处理文件查询 Windows 服务来获取 tomcat 路径。

您能否建议如何从Windows服务获取Tomcat8路径。

我试过什么?我通过使用reg查询尝试了以下方法

命令:

reg query "HKLMSystemCurrentControlSetServicesTomcat8" /v "ImagePath"

输出:

HKEY_LOCAL_MACHINESystemCurrentControlSetServicesTomcat8
ImagePath    REG_EXPAND_SZ    C:apache-tomcat-8.5.15bintomcat8.exe //RS// Tomcat8

但是,此命令没有提供绝对路径。我想获取雄猫的绝对路径(例如:C:\apache-tomcat-8.5.15(。

@ECHO OFF
SETLOCAL
FOR /f "delims=/" %%a IN ('reg query "HKLMSystemCurrentControlSetServicesTomcat8" /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设置为 / 以删除似乎存在的尾随华夫饼(因为它是//...然后,如果指定了,它将被分配给第二个令牌(

再次标记结果,这次使用空格作为分隔符,并选择第 1 个、第 2 个和其余行来%%b .。分别%%d。在 %%b 中对关键字符串进行门控,以确保仅处理该行;可执行文件名显示在 %%d 中。选择它的驱动器和路径,在末尾弹出一个.,以便解析器将bin视为文件名,然后选择结果的驱动器和路径。

您的reg query命令行确实返回了 Tomcat8 可执行文件的绝对路径。您似乎想要获取其祖父目录。

首先,我们需要使用 for /F 循环捕获req query命令行的输出:

for /F "skip=1 delims" %%R in ('
    reg query "HKLMSystemCurrentControlSetServicesTomcat8" /V "ImagePath"
') do set "RVAL=%%R"

这将跳过标题并捕获整行,然后:

ImagePath    REG_EXPAND_SZ    C:apache-tomcat-8.5.15bintomcat8.exe //RS// Tomcat8

接下来是删除由四个连续空格分隔的前导值名称和类型,以及尾随的东西 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.15bintomcat8.exe....在功能上等同于C:apache-tomcat-8.5.15

最新更新