如何在Windows上将特定的命令行输出保存为变量?

时间:2015-11-12 18:48:34

标签: batch-file

考虑这个.bat文件:

@ECHO OFF

ECHO Owner: Jeremy.Coulson
ECHO Food: Ham sandwiches
ECHO Drink: Lemonade

考虑第二个.bat文件:

@ECHO OFF

FOR /F "tokens=*" %%a in ('source.bat') do SET OUTPUT=%%a
echo %output%

运行第二个.bat文件的结果是:

Drink: Lemonade

显然,我在这里做的只是获取source.bat输出的最后一件事。如果相反,我想指定要检索哪一行作为变量?例如,如果我只想检索" Food"中的任何内容,该怎么办?线?

2 个答案:

答案 0 :(得分:2)

  1. 要获取包含特定字词的行,请将输出(|)输入find(从/I移除find以进行处理 - 敏感搜索):

    for /F "delims=" %%L in ('call source.bat ^| find /I "Food"') do (
        set OUTPUT=%%L
        REM goto :CONTINUE
    )
    :CONTINUE
    

    如果可能有多个匹配项,您需要决定:如果您想要第一个匹配项,请移除REM前面的goto;如果你想要最后一个,请留下它。

  2. 要获取特定的行号,只需指定skip的{​​{1}}选项:

    for /F

    set "NUMBER=4" set /A "SKIP=NUMBER-1" if %SKIP% leq 0 set "SKIP=" else set "SKIP=skip=%SKIP% " for /F "%SKIP%delims=" %%L in ('call source.bat') do ( set OUTPUT=%%L goto :CONTINUE ) :CONTINUE 将在上面的示例中包含SKIP(尾随 SPACE ,因此skip=3会收到for /F)。 "skip=3 delims="子句确保if为空SKIP或更少的数字被指定为跳过,因为0for /F的情况下抛出语法错误给出。

答案 1 :(得分:1)

请改用FIND。

{{1}}