我有一個文本文件,我必須讀取第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 =:*」 這對我有用。 –