Объединить текстовые файлы Windows с заголовком или датой?

288
huntjp

У меня есть каталог, где у меня есть куча текстовых файлов, выгружаемых для регистрации, каждый из которых находится в чистом формате с разделителями табуляции. Каждый файл имеет свою временную метку, которая мне тоже нужна. Мне нужно объединить их в один файл, чтобы потом можно было разгрузить его на график и представить в виде статистики. Я могу использовать что-то вроде приведенной ниже команды, которая работает, за исключением того, что у меня нет меток времени из файлов, которые можно использовать при представлении метрик.

for %f in (*.txt) do type “%f” >> output.txt 

Существует ли опция, которая также записывает имя файла выше или ниже содержимого этого файла, или способ записи в файл отметки времени последнего изменения записи?

Как я уже упоминал, конечным продуктом является электронная таблица Excel, получающая диаграммы, поэтому, если есть лучший способ получить это из нескольких текстовых файлов, я бы также заинтересовался этим.

Для добавления контекста текстовые файлы представляют собой отформатированные файлы журнала, которые создаются ежечасно и имеют имена с отметкой даты / времени в числовом формате с расширением .txt.

1

2 ответа на вопрос

0
DavidPostill

Есть ли опция, которая также напишет имя файла?

Используйте echoтакже, чтобы добавить имя файла в выходной файл.

Вот пример командного файла, который вы можете изменить соответствующим образом:

test.cmd:

@echo off setlocal enabledelayedexpansion for /f %%f in ('dir /b *.txt') do ( echo filename: %%f >> output.txt  type "%%f" >> output.txt ) endlocal 

Заметки:

  • Вывод из dirиспользуется в противном случае .txtфайлы обрабатываются несколько раз.

Пример использования и вывод:

F:\test\test>dir Volume in drive F is Expansion Volume Serial Number is 3656-BB63  Directory of F:\test\test  12/08/2016 14:04 <DIR> . 12/08/2016 14:04 <DIR> .. 11/08/2016 21:07 8 a.txt 11/08/2016 21:07 8 b.txt 11/08/2016 21:08 8 c.txt 3 File(s) 24 bytes 2 Dir(s) 1,769,524,736,000 bytes free  F:\test\test>type *.txt  a.txt   test1  b.txt   test2  c.txt   test3  F:\test\test>..\test  F:\test\test>type output.txt filename: a.txt test1 filename: b.txt test2 filename: c.txt test3 

Дальнейшее чтение

0
user1016274

Вы можете использовать ()для объединения нескольких команд в блок, чтобы перенаправить вывод их в файл, например так:

@echo off setlocal EnableDelayedExpansion  if exist output.txt del output.txt for /f "delims=" %%f in ('dir /b /od *.txt') do ( echo %%~nf && type "%%f" ) >> output.txt  endlocal 

Я использую &&для объединения команд, скобки необходимы в любом случае из-за перенаправления.
Пакет адресован нескольким точкам, которые пакет @ DavidPostill не обрабатывал:
1 - файл «output.txt» был бы добавлен к самому себе, если бы он существовал. Вы можете либо исключить его из цикла, IF %%f NEQ output.txt (...)либо просто удалить его в начале.
2- файлы сортируются по дате, dir /odчто делает процесс независимым от формата имен файлов, которые могут быть или не быть отсортированы в хронологическом порядке, если отсортированы по алфавиту.
3 - чтобы использовать временную метку имени файла в качестве поля CSV, его расширение удаляется перед записью в файл CSV.

Если вам нужно разбить имена файлов на 2 поля CSV (дата и время), вам придется заменить (например, пробел на запятую, как в

set x=%%~nf && set x=%x: =,% && echo %x% && type "%%f" 

Аналогично, если дата и время различаются по положению, а не по разделителю.

Спасибо! Я попробую этот в AM на работе, но, похоже, он лучше подходит для дня / времени. huntjp 7 лет назад 0