Объединить текстовые файлы 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
Дальнейшее чтение
- Индекс AZ командной строки Windows CMD - Отличный справочник по всем вопросам, связанным с командной строкой Windows.
- dir - Показать список файлов и подпапок.
- echo - отображать сообщения на экране, включать или выключать отображение команд.
- for / f - Циклическая команда против результатов другой команды.