rhaziel
Goto Top

bestimmte Zeile aus .txt oder .log kopieren per batch vbs

Hallo

also ich habe das problem ich will aus einer txt/log datei(ist eh egal ;D)eine bestimmte zeile in eine andere txt oder sogar gleich per e-mail kopieren/verschicken habe scho eine menge über so ein problem hier gelesen und auch probiert aber bekomme leider nur fehlermeldungen
könnte mir jemand helfen ? Es ist völlig egal ob vbs oder batch solange es funktioniert! ;D

Content-Key: 97356

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

Printed on: April 19, 2024 at 15:04 o'clock

Mitglied: 60730
60730 Sep 19, 2008, updated at Oct 18, 2012 at 16:36:16 (UTC)
Goto Top
Servus,

schau doch mal HIER - zu finden unter "Mögliche Antworten oder verwandte Beiträge".

Speziell Beiträge (Code Beispiele) von Bastla nachvollziehen.
Und dann (falls überhaupt noch vorhandene) Fragen stellen.

Und wegwn Mailen, Blat.exe oder Bmail.exe sind dann die Buchstabenkombinationen, mit denen du die Suchfunktion / Google anwirfst.
Gruß
Member: bastla
bastla Sep 19, 2008 at 09:47:13 (UTC)
Goto Top
Hallo rhaziel!

Als Batch etwa so:
findstr /c:"Text, der nur in der bestimmten Zeile enthalten ist" "D:\Egaldatei.txt">"D:\Neue Datei.txt"  
Für's Versenden per Mail wird gerne "blat" verwendet ...

Grüße
bastla

[Edit] @timobeil: Na geht doch ... face-wink [/Edit]
Member: rhaziel
rhaziel Sep 19, 2008 at 10:16:11 (UTC)
Goto Top
ach so einfach na den gehts ja danke für die sehr schnellen antworten mit blat kenn ich mich aus ich probiers ma

also ich habs ma so gemacht wie du geschrieben hast aber bei mir kommt immer ne neue leere txt raus egal was ich nach dem c: eingegeben habe obs bei der Quelle.txt nun der anfang ende oder mitte einer zeile war immer in der Ausgangs.txt nichts drin
Mitglied: 60730
60730 Sep 19, 2008 at 10:53:25 (UTC)
Goto Top
servus,

gib mal
Type "D:\Egaldatei.txt">"D:\Neue Datei.txt"
ein - wird die gefüllt und was steht da drin?

Umlaute usw. bitte bei find & findstr aussparen

Gruß

@ Bastla: auch ein blindes huhn findet mal ein Korn face-wink
Member: bastla
bastla Sep 19, 2008 at 11:03:02 (UTC)
Goto Top
Hallo rhaziel!

Falls sich das mit Deinem Gewissen vereinbaren lässt, könntest Du vielleicht einmal konkret die verwendete Zeile (und ev sogar einen Auszug aus der "txt/log"-Datei) posten - ansonsten bitte beachten, dass der Suchtext exakt mit dem Text der Zeile übereinstimmen muss (bzw noch den Schalter "/i" verwenden - siehe "findstr /?") ...

Grüße
bastla
Member: rhaziel
rhaziel Sep 19, 2008 at 11:57:26 (UTC)
Goto Top
@timobell

hab ma gemacht was du sagtest und er kopierte 1:1 die zeilen aber alle ;D

also ich hab mir nen paar threads angeschaut und 1 brauchbare batch gefunden (naja die einzige die funktioniert)aber die war denke ich für was anderes da ich bekomme nun immer eine output.txt mit bestimmten zeilen aus meiner Quelle.txt
ich werde mich ma bei der bissl eingucken und ausprobieren!
perfekt wäre es natürlich wenn mir schnell einer erklärt also nochma zudem was ich brauche:
"Ich möchte von einem protokoll was zeitlich angeordnet ist immer die neuesten also die ersten oder letzten log eintragungen kopieren und in eine neue txt einfügen"
das mit zeitlicher anordnung is auch son ding möchte eher darüber gehen das die batch datei kapiert :das ist zeile 1 also kopier ich zeile 1" ich hoffe ja das das relativ einfach umsetzbar ist

achja ich finds klasse das man so schnell antworten hier bekommt vielen dank schonma in vorraus ;D
Member: bastla
bastla Sep 19, 2008 at 12:03:20 (UTC)
Goto Top
Hallo rhaziel!

Erste Zeile:
@echo off & setlocal
set Zeile=
for /f "usebackq delims=" %%i in ("D:\Egaldatei.txt") do if not defined Zeile set "Zeile=%%i"  
>"D:\Neue Datei.txt" echo %Zeile%  

Letzte Zeile:
@echo off & setlocal
for /f "usebackq delims=" %%i in ("D:\Egaldatei.txt") do set "Zeile=%%i"  
>"D:\Neue Datei.txt" echo %Zeile%  
Wenn Du jeweils
>>"D:\Neue Datei.txt" echo %Zeile%  
als letzte Zeile verwendest, wird die Zeile an eine ev schon bestehende "D:\Neue Datei.txt" angefügt.

Grüße
bastla
Member: rhaziel
rhaziel Sep 19, 2008 at 12:34:41 (UTC)
Goto Top
hmm es kommt immer in der output.txt das gleiche mit den batches

"ECHO ist ausgeschaltet (OFF)."
Member: bastla
bastla Sep 19, 2008 at 12:48:51 (UTC)
Goto Top
Hallo rhaziel!

Das ist eigentlich nur möglich, wenn die Eingabedatei leer ist (bzw nur Leerzeichen enthält).

Falls dem nicht so wäre: Magst Du vielleicht ein paar Musterzeilen (auch mit veränderten/anonymisierten Daten - interessant wären nur Aufbau bzw ev enthaltene Sonderzeichen) dieser Datei posten?

Grüße
bastla
Member: rhaziel
rhaziel Sep 22, 2008 at 05:29:41 (UTC)
Goto Top
hmm also der inhalt ist bis jetz relativ egal sind aber keine sonderzeichen oder dergleichen dabei ich würde halt nur gerne wissen wie es geht

vielleicht mal für ne log datei von mein teamspeak server zb oder so ;D

hmm also was hier steht funktionierte bis jetz leider nicht(oder ich bin zu blöde!)

vielleicht hilft es euch wenn ich zb nur die neuesten sagen wir mal 2-3 zeilen in eine neue txt datei packe

ich bin zz soweit das ich es hinbekomme aus einer txt datei mit definierten anfang und ende das was dazwischen ist in eine neue txt zu schreiben blos das is relativ blöde wenn man aus einer txt datei die sich dauernd verändert was zu machen
Member: Biber
Biber Sep 22, 2008 at 06:35:21 (UTC)
Goto Top
Moin rhaziel,

drei Hinweise zu Deinem Kommentar:
1) Heute muss Montag sein.
2) Der ganze Kommentar enthält keinen einzigen Punkt - was eventuell daran liegt, dass Du es nicht auf den Punkt bringen willst.
3) Der letzte Bandwurm erschließt sich mir nicht ganz - ist das ein Rap, ein Text von Xavier Naidoo oder sogar Dadaismus?
...blos das is relativ blöde wenn man aus einer txt datei die sich dauernd verändert was zu machen

Falls wir hier bei der Fehlerabstellung helfen sollen, dann poste bitte einen wirklichkeitsnahen Auszug aus Deiner Logdatei..
Philosopische Betrachtungen wie ...hmm also der inhalt ist bis jetz relativ egal .. sind nicht so zielführend.

Danke
Biber
Member: rhaziel
rhaziel Sep 22, 2008 at 06:45:50 (UTC)
Goto Top
Ok alles klar sry wegen meiner Formulierung ist halt noch früh ;D

warum ich weder Punkt und Komma benutze ist klar:ich bin Faul und ich empfand es noch nie anstrengend einen Text ohne dergleichen zu lesen.

So zum Thema also ein kleiner ausschnitt aus der txt datei wo ich es zz versuche:
Anfang
Sep, 04 - 13:34:04 | Startig Hot CPU
Sep, 04 - 13:34:04 | Initializing DefectTrack Engine version 2.2.0
Sep, 04 - 13:34:04 | Loading options...
Sep, 04 - 13:34:04 | Reading system info...

Sep, 04 - 13:34:06 | CPU: AMD Athlon(tm) XP 2400+

Sep, 04 - 13:34:06 | Speed: 1999MHz

Sep, 04 - 13:34:06 | -1

Sep, 04 - 13:34:06 | 64
Ende

Ich bin zz soweit das er mir diese Zeilen per batch zur Output.txt kopiert aber nur mit definierten Anfang und Ende wie man sieht ich möchte aber gerne das er mir nur die ersten 2-3 zeilen kopiert
Mitglied: 60730
60730 Sep 22, 2008 at 06:57:57 (UTC)
Goto Top
Servus,

deine Zeile:

hmm also der inhalt ist bis jetz relativ egal sind aber keine sonderzeichen oder dergleichen...
widerspricht sich leider mit dem Log..
Sep, 04 - 13:34:04 | Startig Hot CPU
|
...ist ein Sonderzeichen ;-(
Ergo müsste die Zeile ungefähr so lauten:

findstr /c:"Startig Hot CPU" "D:\Egaldatei.txt">"D:\Neue Datei.txt"  

Ps:
hab ma gemacht was du sagtest und er kopierte 1:1 die zeilen aber alle ;D
ok genau das sollte beim Befehle "type" auch herauskommen.
^^ Mit find oder findstr kannst du z.b keine "echten" (via regedit exportierten) .reg files durchsuchen, erst wenn die per Type in eine frische Datei geschrieben wurden.

Gruß
Member: rhaziel
rhaziel Sep 22, 2008 at 07:18:59 (UTC)
Goto Top
Ok tut mir leid hast Recht aber
ich bin noch unerfahren in batch etc möchte aber gerne lernen und du hast mir grade schon einmal geholfen.

also wie ich grade "verstanden" habe bezieht sich findstr /c:"...."
auf der zu kopierenden Zeile X die man wohl wie du geschrieben hast genau bezeichnen muss
"D:\Egaldatei.txt" bezieht sich klar auf die ausgangsdatei die ich bearbeiten will
wo es hinkopiert werden will alles klar

nun ich möchte gerne bei einer .txt datei die erste Zeile die sich ständig verändert kopieren also brauche ich wie ich es mir denke
eine Definition für findstr /c"ersteZeile"
Ich habe leider keine ahnung ob es sowas überhaupt gibt oder ob es mit Batch überhaupt möglich ist!
Member: Biber
Biber Sep 22, 2008 at 07:30:47 (UTC)
Goto Top
Moin rhaziel,

die erste Zeile einer Textdatei unabhängig vom Inhalt hat bastla weiter oben beschrieben.
Am 19.09.2008 um 14:03:20 Uhr.

die zweite, dritte etc. Zeile kannst Du analog abfackeln.

Grüße
Biber
Member: rhaziel
rhaziel Sep 22, 2008 at 07:33:50 (UTC)
Goto Top
ach alles klar vielen dank Bastla und Biber
wenn ihr lust und zeit hättet könntet ihr mir bitte erklären was die befehle nützen also im einzelnen das ich auch mal den Grundprozess verstehe oder mir einen hilfreichen link schicken?

ahh ich habs nun verstanden warum bastla seine batch am anfang nicht lief ich habe immer eine log datei verwendet mann muss es aber mit einer txt datei benutzen das kapier ich nun denke mal jetz bekomme ich es hin

nochma vielen dank an die die mir ne antwort geschrieben haben !
Member: bastla
bastla Sep 22, 2008 at 12:43:03 (UTC)
Goto Top
Hallo rhaziel!

Am Beispiel des Batches für die erste Zeile (und unter Berücksichtigung des - nicht so leicht als Sonderzeichen erkennbaren face-wink - "|"):

Mit
set Zeile=
wird sicher gestellt, dass die Variable %Zeile% keinen Inhalt hat (und damit in Batch eigentlich nicht existiert).

for /f "usebackq delims=" %%i in ("D:\Egaldatei.txt") do ...  
Diese "for"-Schleife dient dazu, jede einzelne Zeile der in der Klammer angegebenen Datei zu lesen und als %%i zur Verfügung zu stellen, wobei "delims=" dafür sorgt, dass die Zeile am Stück bleibt, indem festgelegt wird, dass es kein Trennzeichen ("delimiter") gibt - nach dem "=" und vor dem Anführungszeichen steht genau: "nichts" face-wink. "usebackq" hat nur den Zweck, die Dateiangabe unter Anführungszeichen schreiben zu können.
Es wird für jede gelesene Zeile (außer, wenn sie leer ist) der nach dem "do" folgende Teil ausgeführt:
... if not defined Zeile set "Zeile=%%i"  
Durch die Abfrage, ob es schon eine Variable %Zeile% gibt, wird nur beim ersten Mal = für die erste Zeile (wo es die Variable sicher noch nicht gibt, siehe oben) der Inhalt von %%i in die Variable %Zeile% geschrieben - bei allen weiteren Durchläufen (für die weiteren Zeilen der Textdatei) ändert sich der Inhalt von %Zeile% nicht mehr (im Gegensatz zum Batch für die "letzte Zeile", da dort immer wieder der Variableninhalt überschrieben wird, sodass am Ende eben die letzte Zeile in %Zeile% enthalten ist).

>"D:\Neue Datei.txt" echo %Zeile:|=^|%  
Das Umleitungszeichen ">" sorgt dafür, dass die Ausgabe des folgenden Befehles in eine neu erstellte Datei "D:\Neue Datei.txt" geschrieben wird. Ausgegeben wird dabei nicht exakt die eingelesene Zeile, sondern es wird vorweg innerhalb dieser Zeile das Zeichen "|" durch "^|" ersetzt - das vorangestellte Caret "^" legt fest, dass das folgende Zeichen nicht "interpretiert" werden soll, sondern einfach (so, wie es da steht) auszugeben ist.

Grüße
bastla