извлечение определенных строк данных из нескольких текстовых файлов для преобразования в один CSV-файл - PullRequest
1 голос
/ 21 октября 2011

Во-первых, извиняюсь за мою плохую способность к кодированию, однако я потратил несколько часов на чтение форумов и наделение их информацией, поэтому я был бы очень признателен за любую помощь по следующей проблеме:

У меня есть 3 текстовых файла, из которых я хотел бы взять имя файла, 3-ю строку данных, 5-ю строку и 7-ю строку и вставить их в один CSV, например:

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

Просто, а? не так, потому что мне не хватает моего кодирования "skillz", и я могу справиться с вашей помощью. Вот что у меня есть:

Первый пакетный файл (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"

Любая помощь телу?

Большое спасибо! Джеймс

Ответы [ 2 ]

2 голосов
/ 22 октября 2011
@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
)

Этот пакетный файл обрабатывает все .txt файлы в каталоге, как вы сказали.

1 голос
/ 21 октября 2011

Вы можете прочитать строки с помощью другой конструкции.

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!

Или с помощью цикла (Андрей)

Setlocal EnableDelayedExpansion
<%1 (
  For /L %%n in (1 1 7) do (
    Set /p line%%n=
  )
)
Echo %1,!line3!,!line5!,!line7!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...