我只想知道如何解析批处理命令输出。以下是Iam尝试获取服务名称的小例子。
C:\Users\pande\Desktop>sc qdescription "test"
[SC] QueryServiceConfig2 SUCCESS
SERVICE_NAME: test
DESCRIPTION: C:\Program Files (x86)\TEST\small.exe /service
这里的问题是,从上面的结果我想把下面的部分作为批处理文件变量。
C:\Program Files (x86)\TEST\
通过goggling我们可以通过 for / f 实现这一点,但实际上我不知道如何获得它。
任何人都可以帮助我实现这一目标。
提前致谢。
答案 0 :(得分:1)
@ECHO OFF
SETLOCAL
SET "DESC="
FOR /f "tokens=1*delims=: " %%a IN ('sc qdescription "bonjour service" ') DO (
IF "%%a"=="DESCRIPTION" SET "desc=%%b"
)
ECHO DESC=%DESC%
:: Setting DESC to the string expected - then ECHOing to prove
SET "DESC=C:\Program Files (x86)\TEST\small.exe /service"
ECHO DESC=%DESC%
:: Now remove part past '/' and select drive/path from assumed filename
FOR /f "tokens=1delims=/" %%a IN ("%desc%") DO SET "desc=%%~dpa"
ECHO DESC=%DESC%
:: Now remove terminal "\"
SET "desc=%desc:~0,-1%"
ECHO DESC=%DESC%
:: Extension - to remove the last "leaf" directoryname
::
FOR /f "delims=" %%a IN ("%desc%") DO SET "desc=%%~dpa"
ECHO DESC=%DESC%
:: Now remove new terminal "\"
SET "desc=%desc:~0,-1%"
ECHO DESC=%DESC%
GOTO :EOF
您需要将此文本保存在名为whateveryoulike
.bat 的文件中,然后从命令提示符处将其作为whateveryoulike
运行。
我在我的机器上使用了已安装的服务,因为我无法访问您的服务器。您需要替换上面的bonjour service
替换您的服务名称。
然后我将desc
设置为您显示的值,然后将其设置为您需要的部分。
修改为删除最后一个目录名称叶子。