1

首先,为我糟糕的编码能力道歉,但是我花了几个小时阅读论坛并给它一个破解,所以我非常感谢任何关于以下问题的帮助:

我有 3 个文本文件,我想从中获取文件名、第 3 行数据、第 5 行和第 7 行并将它们弹出到单个 CSV 中,如下所示:

filename1, linedata3, linedata5, linedata7
filename2, linedata3, linedata5, linedata7
filename3, linedata3, linedata5, linedata7

简单的,嗯?不是这样,因为我的编码“技能”相当缺乏,可以在你的帮助下完成。这是我到目前为止所拥有的:

首先是一个批处理文件(go.bat):

@echo off
for /f "skip=2 delims=" %%i in (%1) do >>lines.txt echo %~n1 %%i & goto :EOF

然后手动命令行输入:

go.bat file1.txt
go.bat file2.txt
go.bat file3.txt

因此,如您所见,我为一行文本完成了此操作,但不知道如何将第 3 行和第 5 行附加到输出的末尾。另外,我真正想要的是一个正确的命令行条目,这样我就可以对目录中的所有文本文件执行此操作。我尝试了以下方法,但似乎遗漏了一些东西:

for %i in (*.*) do go.bat "%i"

任何身体帮助?

非常感谢!詹姆士

4

2 回答 2

2
@echo off
setlocal EnableDelayedExpansion
if exist result.csv del result.csv
for %%f in (*.txt) do (
    set i=0
    for /F "delims=" %%l in (%%f) do (
        set /A i+=1
        set line!i!=%%l
    )
    echo %%f, !line3!, !line5!, !line7! >> result.csv
)

This Batch file process all .txt files in the directory, as you said.

于 2011-10-21T22:59:04.707 回答
1

您可以使用另一个构造来阅读这些行。

setlocal EnableDelayedExpansion
< %1 (
Set /p line1=

Set /p line2=
Set /p line3=
Set /p line4=
Set /p line5=
Set /p line6=
Set /p line7=
)
Echo %1,!line3!,!line5!,!line7!

或使用循环 (Andriy)

Setlocal EnableDelayedExpansion
<%1 (
  For /L %%n in (1 1 7) do (
    Set /p line%%n=
  )
)
Echo %1,!line3!,!line5!,!line7!
于 2011-10-21T17:03:40.760 回答