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

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

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

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

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

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

2 ответа

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

@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"

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

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

использование 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

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

Другие вопросы по тегам