Concatena arquivos de texto do Windows com título ou data?

1

Eu tenho um diretório onde eu tenho um monte de arquivos de texto sendo despejados para log que estão cada um em um formato limpo delimitado por tabulações. Cada arquivo é nomeado com o timestamp que eu também preciso. Eu preciso mesclar estes em um arquivo para que eu possa descarregar para gráfico e apresentar como estatísticas. Eu posso usar algo como o comando abaixo, que funciona, exceto que eu não tenho timestamps dos arquivos para usar na apresentação das métricas.

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

Existe uma opção que também escreve o nome do arquivo acima ou abaixo do conteúdo desses arquivos, ou uma maneira de gravar no arquivo um registro de data e hora de quando a entrada foi modificada pela última vez?

Como mencionei, o produto final é uma planilha do Excel que está obtendo gráficos, portanto, se houver uma maneira melhor de obter isso de vários arquivos de texto, também estarei interessado nela.

Para adicionar contexto, os arquivos de texto são arquivos de log formatados produzidos por hora e nomeados com o carimbo de data / hora em números com uma extensão .txt.

    
por huntjp 12.08.2016 / 14:24

2 respostas

0

Existe uma opção que também escreve o nome do arquivo?

Use echo para também adicionar o nome do arquivo ao arquivo de saída.

Aqui está um arquivo de lote de exemplo que você pode modificar conforme apropriado:

test.cmd:

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

Notas:

  • A saída de dir é usada, caso contrário, os arquivos .txt são processados várias vezes.

Exemplo de uso e saída:

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

Leitura Adicional

por 12.08.2016 / 15:06
0

Você pode usar () para combinar vários comandos em um bloco para redirecionar a saída deles para um arquivo, como este:

@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

Eu uso && para concatenar comandos, os colchetes são necessários de qualquer maneira por causa do redirecionamento.
O lote aborda vários pontos que o lote do @ DavidPostill não manipulou:
1- o arquivo "output.txt" seria adicionado a si mesmo se existisse. Você pode excluí-lo do loop usando IF %%f NEQ output.txt (...) ou apenas excluí-lo no começo.
2- os arquivos são classificados por data usando dir /od , o que torna o processo independente do formato dos nomes de arquivos - que podem ou não ser classificados cronologicamente se classificados em ordem alfabética.
3- para usar o registro de data e hora do nome do arquivo como um campo CSV, sua extensão é removida antes de gravar no arquivo CSV.

Se você precisar que os nomes dos arquivos sejam analisados em dois campos CSV (data e hora), será necessário substituir (por exemplo) um espaço por uma vírgula, como

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

Similarmente, se data e hora forem diferenciadas por posição em vez de delimitador.

    
por 14.08.2016 / 12:12