感谢您查看我的查询。我已将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
。