Verketten Sie Windows-Textdateien mit Titel oder Datum?

396
huntjp

Ich habe ein Verzeichnis, in dem eine Reihe von Textdateien für die Protokollierung abgelegt werden, die jeweils in einem durch Tabulator getrennten Format vorliegen. Jede Datei hat einen Zeitstempel, den ich auch brauche. Ich muss diese in einer Datei zusammenführen, damit ich sie abschicken kann, um sie als Diagramm darzustellen und als Statistik darzustellen. Ich kann etwas wie den folgenden Befehl verwenden, der funktioniert, außer dass ich keine Zeitstempel aus den Dateien habe, um die Metriken zu präsentieren.

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

Gibt es eine Option, die auch den Namen der Datei über oder unter dem Inhalt der Datei schreibt, oder eine Möglichkeit, einen Zeitstempel in die Datei zu schreiben, als der Eintrag zuletzt geändert wurde?

Wie ich bereits erwähnte, ist das Endprodukt eine Excel-Tabelle, die Diagramme abruft. Wenn es also einen besseren Weg gibt, aus mehreren Textdateien darauf zuzugreifen, würde mich das auch interessieren.

Zum Hinzufügen von Kontext sind die Textdateien formatierte Protokolldateien, die stündlich erstellt und mit dem Datums- / Zeitstempel in numerischen Zeichen mit der Erweiterung .txt benannt werden.

1

2 Antworten auf die Frage

0
DavidPostill

Gibt es eine Option, die auch den Namen der Datei schreibt?

Verwenden Sie echodiese Option, um auch den Dateinamen zur Ausgabedatei hinzuzufügen.

Hier ist eine Beispiel-Batch-Datei, die Sie bei Bedarf ändern können:

test.cmd:

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

Anmerkungen:

  • Die Ausgabe von dirwird verwendet, andernfalls werden die .txtDateien mehrmals verarbeitet.

Verwendungsbeispiel und Ausgabe:

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 

Lesen Sie weiter

  • Ein AZ-Index der Windows-CMD-Befehlszeile - Eine hervorragende Referenz für alles, was mit Windows-Cmd-Zeilen in Verbindung steht.
  • dir - Zeigt eine Liste von Dateien und Unterordnern an.
  • Echo - Meldungen auf dem Bildschirm anzeigen, Befehlsecho ein- oder ausschalten.
  • for / f - Schleifenbefehl gegen die Ergebnisse eines anderen Befehls.
0
user1016274

Sie können ()mehrere Befehle zu einem Block kombinieren, um deren Ausgabe in eine Datei umzuleiten:

@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 

Ich verwende &&zum Verketten von Befehlen, die Klammern sind wegen der Umleitung trotzdem notwendig.
Der Stapel behebt mehrere Punkte, mit denen der Stapel von @ DavidPostill nicht fertig wurde:
1- Die Datei "output.txt" würde sich selbst hinzugefügt, wenn sie vorhanden wäre. Sie können es entweder aus der Schleife ausschließen IF %%f NEQ output.txt (...)oder es einfach am Anfang löschen.
2- Dateien werden nach Datum sortiert, dir /odwodurch der Prozess unabhängig von dem Format der Dateinamen wird. Dies kann chronologisch sortiert werden, wenn es alphabetisch sortiert ist.
3- Um den Dateinamen-Zeitstempel als CSV-Feld zu verwenden, wird die Erweiterung vor dem Schreiben in die CSV-Datei entfernt.

Wenn Sie die Dateinamen in 2 CSV-Felder (Datum und Uhrzeit) analysieren müssen, müssen Sie (z. B.) ein Leerzeichen durch ein Komma ersetzen, wie in

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

Ähnlich, wenn Datum und Uhrzeit nach Position anstelle von Trennzeichen unterschieden wurden.

Vielen Dank! Ich werde es am Morgen bei der Arbeit ausprobieren, aber es sieht so aus, als würde es den Tag / die Zeiten besser ansprechen. huntjp vor 7 Jahren 0