hanswurst12
Goto Top

Mittels Batch eine Textdatei auslesen und gleichzeitig neue schreiben

Ich möchte mit einer Batch-Datei einen Ordner voller Textdateien auslesen. Diese sollen nun ausgelesen werden. Der Inhalt dieser Textdateien soll in eine seperate Textdatei nacheinander stehen.

Hallo,

ich habe hunderte Textdateien.
Diese sollen nun nacheinander abgearbeitet werden und einige Formatierungen dabei entfernen und schließlich das Ergebnis in eine txt Datei schreiben.

Beispiel:

LOG.txt sieht so aus:

TRASH
TRASH
USER: (TAB) ABC
COMPUTERNAME: (TAB) DEF
DATE: (TAB) GHI

Davon sind hunderte in einem Ordner.

Nun soll jede Textdatei ausgelesen werden und das Ergebnis in eine AUSWERTUNG.txt fließen.

Also in etwa so:

USER - COMPUTERNAME
USER VON FILE1 COMPUTER VON FILE1
USER VON FILE2 COMPUTER VON FILE2
...
usw.


Wie genau mache ich das? Hat jemand eine Idee?


Danke
hanswurst12

Content-Key: 119432

Url: https://administrator.de/contentid/119432

Printed on: April 20, 2024 at 02:04 o'clock

Mitglied: 77559
77559 Jun 30, 2009 at 15:16:52 (UTC)
Goto Top
Willkommen im Forum.

Dein gewähltes Synonym lässt nicht unbedingt auf ernsthafte Absichten schließen (wir hatten hier letztens so viele Kasper) und deine Angaben reichen nicht aus, eine Beziehung zwischen den Daten und der Auswertung herzustellen.

Vielleicht überarbeitest du das nochmal.

Gruß
LotPings
Member: bastla
bastla Jun 30, 2009, updated at Oct 18, 2012 at 16:38:34 (UTC)
Goto Top
... oder nimmst eine Anleihe bei diesem Beitrag, wobei die "for /f"-Zeilen für Deine Daten generell einfach mit
for /f "tokens=1*" %%a ...
beginnen könnten und Dein gewünschter Wert dann immer in %%b zu finden sein sollte. Ein "/b" beim "findstr" könnte zusätzlich für mehr Sicherheit sorgen (siehe "findstr /?").

Grüße
bastla
Member: hanswurst12
hanswurst12 Jun 30, 2009 at 17:46:20 (UTC)
Goto Top
Danke Bastla, hat nach ein bisschen anpassen super geklappt!

@echo off & setlocal enabledelayedexpansion
set "Verzeichnis=C:\Users\xxx\Documents\LOGS"
set "Typ=txt"
set "Liste=C:\Users\xxx\Documents\LOGS\Liste.txt"

if exist "%Liste%" del "%Liste%"
for %%i in ("%Verzeichnis%\*.%Typ%") do (
for /f "tokens=2*" %%a in ('findstr /i /c:"USER:" "%%i"') do set "Zeile=%%a"
for /f "tokens=2*" %%a in ('findstr /i /c:"COMPUTERNAME:" "%%i"') do echo !Zeile! - %%a
)>>"%Liste%"
Member: Switchblade
Switchblade Jul 12, 2009 at 19:49:34 (UTC)
Goto Top
Hallo zusammen,

ich hab vor, aus einer Textdatei, die es mehrere Male gibt und auf den Namen "Defcore.txt" lautet, zwei Zeilen zu entnehmen und in eine neue Textdatei einzufügen.

Das Beispiel von hanswurst12 habe ich genommen und entsprechend abgeändert:
@echo off & setlocal enabledelayedexpansion
set "Verzeichnis="D:\Full Version Games\Clonk Rage\ModernCombat.c4d""  
set "Typ=txt"  
set "Liste="D:\Full Version Games\Clonk Rage\ID.txt""  

if exist "%ID%" del "%ID%"  
for %%i in ("%Verzeichnis%\*.%Typ%") do (  
for /f "tokens=2*" %%a in ('findstr /i /id="%%i"') do set "Zeile=%%a"  
for /f "tokens=2*" %%a in ('findstr /i /Name="%%a"') do echo !Zeile! - %%a  
)>>"%ID%"  

Leider behauptet der jetzt, das Verzeichnis würde nicht exisitieren, dabei hab ich extra die Anführungszeichen hinzugesetzt. Oder bin ich bei meiner Idee komplett falsch?

Das Verzeichnis "ModernCombat.c4d" ist ein SVN Verzeichnis und wird regelmäßig geupdatet. Da ich die entsprechenden IDs in den Scripts immer wieder verwende, ist eine Liste gut, in der alle verwendeten IDs gelistet sind. Diese IDs sind in der "Defcore.txt" hinterlegt. Zusätzlich zur Zeile "ID=xxxx" brauch ich aber auch noch "Name=xxxx" sonst weiß ich ja nicht, was es für ein Objekt ist.

Vielleicht kann mir jemand eine helfende Hand reichen.

Gruß,
Switchblade
Member: Biber
Biber Jul 12, 2009 at 21:19:15 (UTC)
Goto Top
Moin Switchblade,

willkommen im Forum.
Ich habe Deinen Schnipsel mal in Code-Tags gesetzt.
Wenn Diu noch mal mit "Editieren" rein gehst, dann siehst Du für das nächste Mal wie leicht das geht.

Zu Deiner Frage:
Schau Dir nochmal kurz die Hilfe zu FindStr an (FindStr /? am CMD-Prompt)

So wie Du es in dem FOR-Anweisungsblock formiliert hast, werden /Id ind /Name als Findstr-Parameter aufgefasst, falls der Schnipsel so weit kommen würde.
Aber vorher geht auch schon irgendwas schräg mit den Variablen
  • %id% (die nie gesetzt wird) und
  • %Liste% (die gesetzt, aber nie verwendet wird.

Grüße
Biber
Member: Switchblade
Switchblade Jul 13, 2009 at 16:10:15 (UTC)
Goto Top
Hallo Biber,

danke für die Begrüßung.

Okay, die Code-Tags sind wie die HTML-Tags für's fett und kursiv machen etc., das hab ich verstanden.

Schnipsel ist gut, die Batch-Datei enthält ja nicht mehr. Ist also vollständig. ;)

Die Variablen sind wahrscheinlich nötig, da sich die entsprechende ID immer wieder ändern kann und aus Zahlen, Buchstaben sowie Underline _ bestehen kann. Für die Liste brauch ich dann wohl keine.

Ehrlich gesagt hab ich keinen Schimmer wie die Datei abläuft, bei ganz einfachen Konstrukten ist das für mich nachvollziehbar. In diesem Fall hab ich jedoch wirklich nur kopiert und die entsprechenden Stellen so abgeändert wie sie für mich Sinn ergeben haben.

Zeile 6 kann ich wohl getrost löschen, %%i stellt wohl einen Integer (als Zahl) dar. Der %%a dann einen Buchstabencode. %Verzeichnis% gibt das oben mit set angegebene Verzeichnis an. Dasselbe für die anderen beiden Anweisungen.

Für For hab ich mir auch nochmal die Hilfe angesehen. %%i und %%a sind demnach Variablen für ein Batchprogramm, so wie ich sie brauche. Nur werden die beiden wohl gar nicht benutzt, weil sie nicht benannt sind?

Gruß,
Switchblade

Edit:
Okay, nach einer ernsthaften Auseinandersetzung mit dem FINDSTR Befehle, kann ich nun ein Ergebnis vorweisen:

@echo off
findstr /S /I /D:ModernCombat.c4d;ModernCombat.c4f /C:"Name=" /C:"id=" defcore.txt >>IDandNAMES.txt  

Groß- und Kleinschreibung wird ignoriert. In beiden SVN Verzeichnissen wird nach den Zeichenfolgen "id=" und "Name=" gesucht und diese gefundenen Ergebnisse in eine Textdatei mit dem Namen "IDandNAMES.txt" geschrieben.

Nochmals vielen Dank an Biber, der mich auf die richtige Spur brachte. face-smile