我有一个文本文件,我必须读取第21行并将其设置为变量。我使用下面的。读取文本文件中的特定行,并通过批处理文件将其设置为变量
Set Source="C\Users\file.txt"
for /f "Tokens=* delims=" %%G in ('findstr /n "^" %Source%') do (
if %%G equ 21 (
set Variable="%%H"
)
)
它不工作。请帮忙。
我有一个文本文件,我必须读取第21行并将其设置为变量。我使用下面的。读取文本文件中的特定行,并通过批处理文件将其设置为变量
Set Source="C\Users\file.txt"
for /f "Tokens=* delims=" %%G in ('findstr /n "^" %Source%') do (
if %%G equ 21 (
set Variable="%%H"
)
)
它不工作。请帮忙。
for /f "Tokens=1* delims=:" %%G in ('findstr /n "^" %Source%') do if %%G equ 21 set Variable=%%H
echo.%Variable%
这是我的必需输出。
使用 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需要改变如果在脚本用于%%诉
考虑到第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%".
嗨,谢谢你的回答。但是,这不适合我。 for/f“Tokens = 1 * delims =:”%% G in('findstr/n“^”%Source%')do if %% G equ 21 set Variable = %% H上面提到了正确的结果。 –
“不工作”是什么意思?请解释! – aschipfl
您可以使用'for/f“usebackq skip = 20 delims =”%%我在(“%source%”)中设置“var = %% I”'。有关'skip'的更多信息,请参阅cmd控制台中的'help for'。 – rojo
将您的'Tokens'和'Delims'改为''Tokens = 1 * Delims =:''。使用@rojo的想法,你需要这样做。 'for/f“usebackq skip = 20 delims =”%% I in(%source%)do not defined var set“var = %% I”'。 – Compo
嗨Compo,“Tokens = 1 * Delims =:*” 这对我有用。 –