如何通过批处理文件

时间:2017-06-12 21:35:54

标签: batch-file tomcat

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

2 个答案:

答案 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\..\..