感谢您查看我的查询。 我将tomcat安装为Windows服务,服务名称为“Tomcat8”。 我想通过批处理文件查询Windows服务来获取tomcat路径。
您能否建议如何从Windows服务获取Tomcat8路径。
我尝试了什么? 我通过使用reg query
尝试了以下方法命令:
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 :(得分: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
设置为/
以删除看似在那里的尾随华夫饼干(因为它已经// ...然后它被分配给第二个令牌,如果已经指定的话)
再次对结果进行标记,这次使用空格作为分隔符,分别选择第1行,第2行和剩余行%%b
.. %%d
。在%%b
中对关键字符串进行门控,以确保只处理该行; executable-filename出现在%%d
中。选择此驱动器和路径,在末尾弹出.
,以便解析器将bin
视为文件名,然后选择结果的驱动器和路径。
答案 1 :(得分:0)
您的show()
命令行确实返回Tomcat8可执行文件的绝对路径。您似乎想要获得其祖父目录。
首先,我们需要使用reg query
循环捕获req query
命令行的输出:
for /F
这会跳过标题并捕获整行:
for /F "skip=1 delims" %%R in (' reg query "HKLM\System\CurrentControlSet\Services\Tomcat8" /V "ImagePath" ') do set "RVAL=%%R"
接下来要删除由四个连续 SPACE 分隔的前导值名称和类型,以及尾随符号 SPACE + ImagePath REG_EXPAND_SZ C:\apache-tomcat-8.5.15\bin\tomcat8.exe //RS// Tomcat8
+ SPACE :
//RS//
现在让我们在目录层次结构中多次追加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\..\..
。