读取文本文件中的特定行并通过Batch FIle将其设置为变量

时间:2017-03-09 20:46:11

标签: batch-file

我有一个文本文件,我必须读取第21行并将其设置为变量。我正在使用下面的内容。

Set Source="C\Users\file.txt"
for /f "Tokens=* delims=" %%G in ('findstr /n "^" %Source%') do (
    if %%G equ 21 (
        set Variable="%%H"
    )
)

它不起作用。请帮助。

3 个答案:

答案 0 :(得分:2)

鉴于第21行不是空的,你可以这样做:

set "SOURCE=C\Users\file.txt"
for /F usebackq^ skip^=20^ delims^=^ eol^= %%L in ("%SOURCE%") do (
    if not defined LINE set "LINE=%%L"
)
echo(Line 21 contains "%LINE%".

如果第21行可能为空,则可以改用:

set "SOURCE=C\Users\file.txt"
for /F "usebackq skip=20 delims=" %%L in ('findstr /N "^" "%SOURCE%"') do (
    set "LINE=%%L"
    goto :CONTINUE
)
:CONTINUE
set "LINE=%LINE:*:=%"
echo(Line 21 contains "%LINE%".

这是另一种方法,使用input redirection <

set "SOURCE=C\Users\file.txt"
< "%SOURCE%" (
    for /L %%I in (1,1,20) do set /P LINE=""
    set "LINE="
    set /P LINE=""
)
echo(Line 21 contains "%LINE%".

答案 1 :(得分:0)

for /f "Tokens=1* delims=:" %%G in ('findstr /n "^" %Source%') do if %%G equ 21 set Variable=%%H
echo.%Variable%

这有我所需的输出。

答案 2 :(得分:-1)

使用 SETX 及其 / A 选项。有关详细信息,请参阅 SETX /?

好:

for /f "tokens=*" %V in ('%SystemRoot%\System32\findstr.exe /n /r /c:".*" <FILE_PATH> ^| %SystemRoot%\System32\findstr /b /l /c:"21:"') do set LINE=%V

set LINE=%LINE:~3%
如果在脚本中使用,

%V需要更改为%% V.