2017-03-09 43 views
0

我有一個文本文件,我必須讀取第21行並將其設置爲變量。我使用下面的。讀取文本文件中的特定行,並通過批處理文件將其設置爲變量

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

它不工作。請幫忙。

+1

您可以使用'for/f「usebackq skip = 20 delims =」%%我在(「%source%」)中設置「var = %% I」'。有關'skip'的更多信息,請參閱cmd控制檯中的'help for'。 – rojo

+1

將您的'Tokens'和'Delims'改爲''Tokens = 1 * Delims =:''。使用@rojo的想法,你需要這樣做。 'for/f「usebackq skip = 20 delims =」%% I in(%source%)do not defined var set「var = %% I」'。 – Compo

+1

嗨Compo,「Tokens = 1 * Delims =:*」 這對我有用。 –

回答

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

這是我的必需輸出。

-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需要改變如果在腳本用於%%訴

+0

這是如何幫助用戶讀取文件以獲取正確的行?另外,我不相信用戶的意圖是**永久**將其設置爲環境變量。 – Squashman

+0

這是一個低質量的迴應,與提出的問題無關。 – Compo

+0

如果用戶想在當前批處理文件中使用該變量會怎麼樣? RTM注2.正如我之前所說,聽起來不像他們想要將變量永久設置到SETX所做的系統。 RTM注1. – Squashman

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%". 
+0

嗨,謝謝你的回答。但是,這不適合我。 for/f「Tokens = 1 * delims =:」%% G in('findstr/n「^」%Source%')do if %% G equ 21 set Variable = %% H上面提到了正確的結果。 –

+0

「不工作」是什麼意思?請解釋! – aschipfl

相關問題