2014-04-29 71 views
0

我只想知道我们如何解析批处理命令输出。以下是Iam试图获取服务名称的小例子。在windows中批处理命令输出的解析结果

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实现这一点,但真的不知道我怎样才能得到它。

任何人都可以请帮我实现这一点。

在此先感谢。

回答

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蝙蝠然后运行它作为whateveryoulike从命令提示符文件这段文字。

我在我的机器上使用了安装的服务,因为我没有访问您的服务。您需要用您的服务名称代替上面的bonjour service

然后,我将desc设置为您显示的值,然后如何将其处理为您需要的部分。


修改为删除最后一个目录名叶。

+0

完美,非常感谢您的宝贵答复。这正是我期待的。 – Honey

+0

嗨Magoo,小怀疑,如果我只想得到“C:\ Program Files文件(x86)”,我该怎么办。请回复。 – Honey