0

我需要根据循环中获得的行号将一行提取到文件中。事实上,我从第一个 FOR 命令中得到了第 7 行,到目前为止一切顺利,我必须将这一行读入 myfile.txt。读操作在第二个 FOR 循环中进行;此步骤不起作用,因为我的输出“result.txt”为空

for /f "tokens=1* delims=:" %%a in (lines.txt) do set line=%%a& goto breakFor "%line%"

:breakFor
echo.%line%
for /f "tokens=*" %%a in ('findstr /n .* "myfile.txt"') do if "%%a"=="%1" set line=%%i
echo.%line%>result.txt

这是 myfile.txt 和 lines.txt 的一部分

lines.txt
7:I=output7
515:I=output515
837:I=output837
851:I=output851

myfile.txt is made of lines of text (I1,I2,I3,...)
I1=some text....
I2=text...

你能告诉我为什么并帮助解决这个问题吗?谢谢

4

2 回答 2

2

下面的批处理文件执行以下操作:

  • 读取文件lines.txt的第一行
  • 获取分号前出现的数字
  • 使用此编号在 myfile.txt 中找到该行
  • 显示该行

.

for /f "tokens=1* delims=:" %%a in (lines.txt) do set line=%%a& goto breakFor
:breakFor
echo.%line%
for /f "tokens=1* delims=:" %%a in ('findstr /n "^" "myfile.txt" ^| findstr "^%line%:') do set line=%%b
echo.%line%>result.txt

这是你想要的吗?我宁愿这样做:

for /f "tokens=1* delims=:" %%a in (lines.txt) do set /A line=%%a-1& goto breakA
:breakA
echo.%line%
for /f "skip=%line% tokens=1* delims=:" %%a in ('findstr /n "^" "myfile.txt"') do set line=%%b& goto breakB
:breakB
echo.%line%>result.txt
于 2013-06-11T22:35:30.817 回答
1

试试这个并查看输出:

@echo off &setlocal
set "line=test"
goto breakFor "%line%"
:breakFor
echo "%~1"
于 2013-06-11T22:20:22.697 回答