2017-03-09 95 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

相关问题