从文本文件中获取文本并将每行放入变量

时间:2015-09-22 12:41:53

标签: windows batch-file cmd

我在使用包含2行文本的文本文件时遇到问题,并将文件的每一行转换为单独的变量。

我想我可以重复相同的过程来获取一行文本,只需在skip=1旁边添加delims=并更改它所进入的变量的名称,这不起作用我怎么样计划好了,我无法找到另一种方法。

这是我的代码:

@echo off
for /f "delims=" %%a in (file.txt) do (
set line1=%%a
)
for /f "skip=1 delims=" %%a in (file.txt) do (
set line2=%%a
)

echo %line1%
echo %line2%
pause

文件file.txt中的文本是:

This is the Text on line 1
This is the Text on line 2

而不是我认为输出将会是什么 -

This is the Text on line 1
This is the Text on line 2
Press any key to continue...

就是这样:

This is the Text on line 2
This is the Text on line 2
Press any key to continue...

它只打印两个回声的文本文件的第二行!

请回答这个问题,因为我不知道如何做到这一点真的很烦我

谢谢,Alex

3 个答案:

答案 0 :(得分:1)

这是一种简单的方法:

@echo off
< file.txt ( set /P "line1=" & set /P "line2=" )

echo %line1%
echo %line2%

如果您想阅读更多行或可变行数,建议您阅读Arrays, linked lists and other data structures in cmd.exe (batch) script

答案 1 :(得分:0)

看看这个:

vars.txt(带变量的文件):

var1
var2
var3

tast.bat:

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET varFile=vars.txt
SET i=1
FOR /F %%l IN (%varFile%) DO (
    SET line!i!=%%l
    SET /a i=!i!+1
)
ECHO !line1!
ECHO !line3!
PAUSE

输出:

var1
var3

无论你有多少行/变量,这都会有效。如果您只有一个,它将存储在!line1!中,如果您有1000个,则第500行将存储在!line500!中,依此类推。

答案 2 :(得分:0)

这应该适用于tokens=*

的空格行
@echo off

rem Creating env testing
(echo First blank line should be skiped
    for /l %%i in (1,1,30) do ( echo This is the Text on line %%i)
)>_vars.tmp

setlocal enabledelayedexpansion
set i=1
for /F "skip=1 tokens=*" %%a in (_vars.tmp) do (
    set line!i!=%%a
    set /a i+=1
)
echo:!line1!
echo:!line3!
echo:!line30!
echo:!line100!

echo checking _vars.tmp
more _vars.tmp
del _vars.tmp

pause
exit /b 0