如何从Windows服务通过批处理文件找到Tomcat路径
感谢您查看我的查询。 我有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)。
@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
看作文件名,并选择驱动器&结果路径。
非常感谢您使用解决方案做出及时响应。 –
您的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
。
...但绝对路径是'C:\ apache-tomcat-8.5.15 \ bin \ tomcat8.exe';它的位置是'C:\ apache-tomcat-8.5.15 \ bin'。你能否澄清你的要求? – Compo