在CMD脚本中使用FOR循环和SC查询

时间:2014-11-16 07:01:33

标签: windows batch-file service cmd

假设这条指令:

C:\>SC query state= all | find /I "adobe"

结果是:

SERVICE_NAME: AdobeARMservice
DISPLAY_NAME: Adobe Acrobat Update Service

现在我想在这种情况下获得确切的参数是" Adob​​eARMservice"

这里我的脚本 TestLineArgument.bat

@echo off
cls
REM 
REM for /f "delims=" %%# in ('SC query state= all ^| find /I "adobe"') do ( IS NOT WORKING
REM 
set "SCQueryState=SC query state ^= all"
set "QueryAdobe=%SCQueryState%^^^| find /I ^"adobe^""
for /f "delims=" %%# in ("%QueryAdobe%") do (
    set "THERSERVICE_NAME=%%#"
    echo %%#
    goto :END_FORSCQUERY
)
:END_FORSCQUERY
REM show the Line "SERVICE_NAME: AdobeARMservice"
echo THERSERVICE_NAME:%THERSERVICE_NAME%

FOR /f "tokens=2" %%# IN ("%THERSERVICE_NAME%") DO (
    set "THESERVICE=%%#"
)
REM show the second part "AdobeARMservice"
echo THESERVICE:%THESERVICE%

我的脚本不起作用,我不知道如何使用FOR与SC命令

一些线索?

3 个答案:

答案 0 :(得分:1)

@echo off
    setlocal enableextensions disabledelayedexpansion

    rem Initialize variables
    set "serviceName="
    set "displayName="

    rem Execute the query and retrieve all the SERVICE_NAME lines and
    rem the line with the desired display name

    for /f "tokens=1,*" %%a in ('
        sc query state^= all ^| findstr /i /l /c:"SERVICE_NAME" /c:"Adobe"
    ') do if not defined displayName if "%%a"=="SERVICE_NAME:" (
        set "serviceName=%%b"
    ) else set "displayName=%%b" 

    rem Show retrieved data
    if defined displayName (
        echo %serviceName%
        echo %displayName%
    ) else echo Not found

答案 1 :(得分:0)

这种方法不像你试图实现的方式那样工作,正如@MCND的答案那样,但是如果scQuery查询状态在运行时返回的“ ,这可能是是有用的。

它只是查找字符串“AdobeARMservice”并将THESERVICE var设置为结果:如果找到“AdobeARMservice”,则THESERVICE保持为空。如果发现它获得值= Adob​​eARMservice

@echo off
    Set "THESERVICE="
    For /f %%A in ('sc query state^= all ^| find /i "AdobeARMservice"') do set THESERVICE=%%A
        If "%THESERVICE%"=="" echo AdobeARMservice not found
        If NOT "%THESERVICE%"=="" echo THESERVICE: %THESERVICE%
        pause

答案 2 :(得分:0)

我的问题很简单......

@echo off
set "SERVICE=Adobe"
for /f "delims=" %%s in ('sc query state^= all ^| find /I "%SERVICE%"') do (
    for /f "tokens=2" %%# in ("%%s") do (
        echo THESERVICE:%%#
    )
)