我在使用包含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
答案 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