2015-11-12 53 views
0

考慮這個.bat文件:如何在Windows上將特定行的命令輸出保存爲變量?

@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輸出的最後一個東西。相反,如果我想指定要檢索哪一行作爲變量?例如,如果我只想檢索「食品」行上的任何內容,該怎麼辦?

回答

2
  1. 爲了得到含有特定字,管(|)輸出到find(刪除/Ifind做區分大小寫的搜索)的行:

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

    如果可能會有多個匹配項,您需要決定:如果您想要第一個匹配項,請在goto前刪除REM;如果你想要的最後,離開它。

  2. 爲了得到一定的行號,只是指定的for /Fskip選項:

    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將包含skip=3在上面的例子(具有尾隨SPACE,所以for /F接收"skip=3 delims=")。 if子句可確保SKIP0或更少數字被指定爲跳過的情況下爲空,因爲在給出skip=0的情況下,for /F會引發語法錯誤。

+0

在這種情況下,我只希望有一場比賽,但是當我期望有多場比賽時,我很期待看到該做什麼。謝謝! – mrcoulson

1

只需使用FIND來代替。

@ECHO OFF 

FOR /F "tokens=*" %%a in ('find /I "Drink:" ^<source.txt') do SET OUTPUT=%%a 
echo %output% 
相關問題