1

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

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

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

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

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

2 ответа2

0

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

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

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

0

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

Используйте 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 - Циклическая команда против результатов другой команды.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .