laily89
Goto Top

Textdateien vergleichen und fehlende Zeilen in neuer Datei ausgeben

Hallo ihr Lieben!

Ich habe eine Textdatei1, welche ich mit einer anderen Textdatei2 vergleichen möchte. Die Zeilen sind in den Dateien unterschiedlich angeordnet. Also möchte ich jede Zeile aus Textdatei1 mit den Zeilen aus Textdatei2 vergleichen. Ist die Zeile vorhanden, passt es. Ist sie nicht vorhanden, soll die Zeile aus Textdatei1 in eine neue Datei ausgegeben werden (am besten mit Zeilennummern).

Also so ungefähr:

Textdatei1.txt:

1. BEFEHL_A
2. BEFEHL_B
3. BEFEHL_C

Textdatei2.txt:

1. BEFEHL_A
2. BEFEHL_C

Textdatei3.txt:

1. Zeile 2: BEFEHL_B


Ich habe schon versucht das mit findstr zu machen, aber meine Dateien sind zu groß (ungefähr 300 Zeilen).
Habt ihr eine Lösung, vielleicht mit einer For-Schleife.
Ich bin leider ziemlich ratlos.

Gruß Laily89

Content-Key: 150811

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

Printed on: April 23, 2024 at 08:04 o'clock

Member: bastla
bastla Sep 10, 2010 at 14:44:47 (UTC)
Goto Top
Hallo Laily89 und willkomme im Forum!

Sollten die Zeilen in Deinen Dateien nicht wie dargestellt eine lfd Nr enthalten, also etwa:
<code type="plain"A>BEFEHL_A
BEFEHL_B
BEFEHL_C

sollte eigentlich
findstr /n /v /g:"D:\Textdatei2.txt" "D:\Textdatei1.txt">"D:\Textdatei3.txt"
genügen - bis auf die Tatsache, dass das Ergebnis dann so aussähe:
2:BEFEHL_B
Anderenfalls wäre tatsächlich eine "for /f"-Schleife nötig ...

Grüße
bastla
Member: Laily89
Laily89 Sep 13, 2010 at 07:13:03 (UTC)
Goto Top
Hallo bastla,

bei mir kommt leider eine Fehlermeldung:
FINDSTR: Search string too long.
Ich werde es jetzt mal mit einer For-Schleife versuchen.

Gruss
Laily89
Member: inspiration
inspiration Feb 13, 2011 at 22:58:19 (UTC)
Goto Top
Hallo,

nachdem ich hier viel gelesen habe und mir das Board schon viel hilfe geleistet hat, muss ich jetzt dann doch mal eine Frage stellen.

Und zwar benötige ich eine bat datei, die 2 textdateien vergleicht.

Oki, das ist einfach aber ich brauche es kompliziert.

Beispiel:

text-neu.txt und text-alt.txt

Beide Dateien haben viel zeichen und sollten Zeilenweise kontrolliert werden.

Aber jetzt zu dem großen Problem:

Ich brauche einmal die ausgabe was in der text-neu.txt mehr vorhanden ist als in der text-alt.txt. dies soll z.B. in der neu.txt gespeichert werden.

Dann brauche ich noch eine Ausgabe, was in der text-alt.txt mehr vorhanden ist, als in der text-neu.txt. dies soll dann in der alt.txt gespeichert werden.

Und ich brüchte die kompletten Zeilen als unterschiede. Also nicht nur, zeile 1 unterschied, sonder die komplette zeile 1 soll in der z.B. alt.txt angezeigt werden.

Und es sollte noch in einer extra datei angezeigt werden, ob sich innerhalb der gelciehn Zeilen etwas geändert hat.

Ich hoffe dies wäre mit einer bat Datei zu lösen, denn zu mehr reichen meine Kentnisse leider nicht.

Ich danke schon mal im vorraus.

Gruß
Member: bastla
bastla Feb 14, 2011 at 06:19:29 (UTC)
Goto Top
Hallo inspiration und willkommen im Forum!

Teil 1 Deiner Frage ist soweit nachvollziehbar und etwa so zu lösen:
findstr /v /g:"D:\text-alt.txt" "D:\text-neu.txt">"D:\neu.txt"  
findstr /v /g:"D:\text-neu.txt" "D:\text-alt.txt">"D:\alt.txt"  
In den neu entstandenen Dateien befinden sich die kompletten Zeilen, die (so) in der jeweils anderen Datei nicht enthalten sind.
Und es sollte noch in einer extra datei angezeigt werden, ob sich innerhalb der gelciehn Zeilen etwas geändert hat.
Wenn sich etwas geändert hat, sind die Zeilen nicht mehr gleich und daher in "alt.txt" bzw "neu.txt" enthalten - nach welchem Kriterium wäre denn zu unterscheiden, ob es sich um eine geänderte oder eine zusätzliche Zeile handelt?

Grüße
bastla
Member: inspiration
inspiration Feb 14, 2011 at 06:29:27 (UTC)
Goto Top
Ja Guten Morgen,

um die Uhrzeit schon eine Antwort zu bekommen, ist ja einfach nur WOW !!!! VIELEN VIELEN DANK !!!

Das Problem ist, das ich in neu.txt nur neu dazu gekommene Zeilen bräuchte.

In der alt.txt bräuchte ich dann die Zeilen, die in der text-neu.txt, nicht mehr vorhanden ist.

Und in einer neuen datei z.B. Unterschied.txt bräuchte ich einen abgleich der bei beiden existierenden zeilen, ob es dort innerhalb der Zeilen einen unterschied gibt ?


Ich hoffe das ist jetzt verständlicher geschrieben.


Also vielen dank nochmal.
Member: bastla
bastla Feb 14, 2011 at 10:39:15 (UTC)
Goto Top
Hallo inspiration!

Mir fehlt weiterhin (vielleicht würde es ja ein konkretes Beispiel deutlicher machen) ein Kriterium, anhand dessen ich entscheiden kann, ob eine Zeile der "text-neu.txt" nur verändert oder doch neu ist (in beiden Fällen gibt es ja in "text-alt.txt" keine gleichlautende Zeile) ...

Grüße
bastla
Member: inspiration
inspiration Feb 14, 2011 at 11:13:26 (UTC)
Goto Top
oki, jetzt versuche ich es mal mit einem Beispiel:

text-alt.txt schaut so aus.

11111 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1
11112 Punisher, The Columbia SPHE [ Video DV B 25 25 0

text-neu.txt schau so aus

11111 Ritter der Kokosnuss Columbia SPHE [ UMD-Video DV D 25 25 1
11113 LALELU Columbia SPHE [ UMD-Video DV D 25 25 1

so, jetzt soll in der neu.txt drin stehen, das z.B. 11113 LALELU ... (aber die komplette Zeile) in der text-alt.txt nicht vorhanden ist.

in der alt.txt soll jetzt stehen, das z.B. 11112 Punisher, The .... (aber die komplette Zeile)in der text-neu.txt nicht vorhanden ist.

(mit findstr /G:"Datei" bekomme ich folgende Fehlermeldung: Suchzeichenfolge zu lang)

aber jetzt brauche ich auch noch eine Datei, wo mir eventuelle abweichungen an beliebigen stellen angezeigt werden.
(Z.B. hier jeweils Zeile eins, 9. Spalte, text-alt.txt = 22 aber bei text-neu.txt = 25 )

Ich hoffe das es jetzt (endlich) etwas verständlicher geschrieben ist.
Member: bastla
bastla Feb 14, 2011 at 11:25:27 (UTC)
Goto Top
Hallo inspiration!

Vorweg: Die Fehlermeldung deutet darauf hin, dass es sich um umfangreichere Dateien handelt - wieviele Zeilen mit welcher Zeichenanzahl sind zu erwarten?
Hinsichtlich des skizzierten Entscheidungskriteriums "Nummer" (11111, 11112, etc): Ist dieser Wert in jeder Zeile vorhanden, immer durch ein Leerzeichen vom Rest der Zeile getrennt, mit einer festen Stellenanzahl?
(Z.B. hier jeweils Zeile eins, 9. Spalte, text-alt.txt = 22 aber bei text-neu.txt = 25 )
Und wie würde der Inhalt dieser Datei dann für dieses Beispiel aussehen? "Beliebig" auf die Spaltennummer zu beziehen kann, ganz nebenbei, vermutlich für eine Massenverarbeitung auch nicht funktionieren, wenn sich die Spaltenanzahl von Zeile zu Zeile ändern kann ...

Grüße
bastla
Member: inspiration
inspiration Feb 14, 2011 at 12:33:09 (UTC)
Goto Top
Hallo,

es sind mehr als 5000 Zeilen enthalten. und jede Zeile schätzungsweise mit mind. 60 Zeichen.

Frage 1:

Die Werte sind immer durch ein " ; " (ohne ") getrennt. Stellenanzahl kann unterschiedlich sein.

Frage 2:

Der Inhalt müsste dann nur die Zeile von der neu-text.txt datei beinhalten. Also 11111 Ritter der Kokosnuss Columbia SPHE [ UMD-Video DV D 25 25 1 .
Damit ich weiß das es in dieser Zeile einen Unterschied zu der alt-text.txt datei gibt.


Ich hoffe das ich das richtig verstanden habe und die fragen korrekt beantwortet habe.

Ich würde auch notfalls was anderes nutzen als eine BAT Datei. Es müsste nur automatisch funktionieren. Gegenfalls auch mit Taskplaner.
Das wäre alles kein Problem. Nur am Ende brauche ich halt diese 3 Dateien. Wie, ist mir ziemlich Wurst. HEHE

Und ich als Programmier-NIX-KÖNNER-UND-NIX-WISSER muss das halt einrichten können.


Gruß
Member: bastla
bastla Feb 14, 2011 at 12:51:36 (UTC)
Goto Top
Hallo inspiration!

Ich verstehe das dann mal so:

Jeder Datensatz (Zeile) beginnt mit einer Nummer.
Als Trennzeichen zwischen den Feldern des Satzes dient das Semikolon.
Ein Datensatz, der mit der selben Nummer auch in der anderen Datei vorkommt, allerdings unterschiedlichen Inhalt hat, gilt als "geändert" (--> Unterschied.txt).
Ein Datensatz ist unabhängig von seiner Nummer dann "nicht mehr vorhanden", wenn er nur in "text-alt.txt" existiert (--> alt.txt).
Ein Datensatz ist dann neu, wenn seine Nummer höher als die höchste Nummer in "text-alt.txt" ist (--> neu.txt)

Soweit richtig?

Grüße
bastla
Member: inspiration
inspiration Feb 14, 2011 at 13:04:24 (UTC)
Goto Top
Hallo,

jetzt kommen wir ja immer näher. Grins

Jeder Datensatz (Zeile) beginnt mit einer Nummer. <- richtig
Als Trennzeichen zwischen den Feldern des Satzes dient das Semikolon. <- richtig
Ein Datensatz, der mit der selben Nummer auch in der anderen Datei vorkommt, allerdings unterschiedlichen Inhalt hat, gilt als "geändert" (--> Unterschied.txt). <- richtig
Ein Datensatz ist unabhängig von seiner Nummer dann "nicht mehr vorhanden", wenn er nur in "text-alt.txt" existiert (--> alt.txt). <- richtig
Ein Datensatz ist dann neu, wenn seine Nummer höher als die höchste Nummer in "text-alt.txt" ist (--> neu.txt) <- falsch

Richtig muss es so sein:

Ein Datensatz ist dann neu, wenn er in der text-neu.txt aber nicht in der text-alt.txt existiert. (-->neu.txt)
Member: bastla
bastla Feb 14, 2011 at 13:50:57 (UTC)
Goto Top
Hallo inspiration!

Das sollte dann so gehen (bzw eher kriechen face-wink):
@echo off & setlocal
set "Alt=D:\text-alt.txt"  
set "Neu=D:\text-neu.txt"  
set "DiffAlt=D:\alt.txt"  
set "DiffNeu=D:\neu.txt"  
set "Diff=D:\Unterschied.txt"  
set "Delim=;"  

del "%DiffAlt%" 2>nul  
del "%DiffNeu%" 2>nul  
del "%Diff%" 2>nul  

for /f "usebackq delims=" %%i in ("%Alt%") do echo %%i & findstr /x /c:"%%i" "%Neu%">nul || (  
    for /f "tokens=1* delims=%Delim%" %%a in ("%%i") do (  
        findstr /b "%%a%Delim%" "%Neu%">nul && (>>"%Diff%" echo %%i) || (>>"%DiffAlt%" echo %%i)  
    )
)

for /f "usebackq delims=" %%i in ("%Neu%") do echo %%i & findstr /x /c:"%%i" "%Alt%">nul || (  
    for /f "tokens=1* delims=%Delim%" %%a in ("%%i") do (  
        findstr /b "%%a%Delim%" "%Alt%">nul || (>>"%DiffNeu%" echo %%i)  
    )
)
Zur Information wird jede verarbeitete Zeile auf dem Bildschirm ausgegeben ...

Grüße
bastla
Member: inspiration
inspiration Feb 14, 2011 at 14:11:54 (UTC)
Goto Top
WOW, GENIAL.

Also alt.txt und neu.txt funzen genial !!!!!!

Aber in der unterschied.txt wird außer was in text-alt.txt und text-neu.txt fehlt angezeigt.
Member: bastla
bastla Feb 14, 2011 at 14:19:53 (UTC)
Goto Top
Hallo inspiration!
Aber in der unterschied.txt wird außer was in text-alt.txt und text-neu.txt fehlt angezeigt.
Kannst Du das vielleicht übersetzen? face-wink
[Edit]
Eine Änderung (und nebenbei eine kleine Vereinfachung) ist zwar erforderlich (es sollten ja bei Unterschieden die Zeilen aus der "text-neu..txt" in die "Unterschiede.txt" geschrieben werden) - ersetze dazu die Zeilen ab 13 durch:
for /f "usebackq delims=" %%i in ("%Alt%") do echo %%i & findstr /x /c:"%%i" "%Neu%">nul || (  
    for /f "delims=%Delim%" %%a in ("%%i") do (  
        findstr /b "%%a%Delim%" "%Neu%">nul || (>>"%DiffAlt%" echo %%i)  
    )
)

for /f "usebackq delims=" %%i in ("%Neu%") do echo %%i & findstr /x /c:"%%i" "%Alt%">nul || (  
    for /f "delims=%Delim%" %%a in ("%%i") do (  
        findstr /b "%%a%Delim%" "%Alt%">nul && (>>"%Diff%" echo %%i) || (>>"%DiffNeu%" echo %%i)  
    )
)
aber an der Tatsache, dass (bei meinen Tests) dann auch wirklich nur die passenden Zeilen dort landen, ändert das auch nix ...
@Biber: Das beweist aber wieder nur, dass es besser wäre, am Montag das Haus nicht zu verlassen (Bett wollte ich dann doch nicht schreiben face-wink) ...
[/Edit]

Grüße
bastla
Member: Biber
Biber Feb 14, 2011 at 14:26:07 (UTC)
Goto Top
[OT] @bastla

Zitat von @bastla:
Aber in der unterschied.txt wird außer was in text-alt.txt und text-neu.txt fehlt angezeigt.
Kannst Du das vielleicht übersetzen? face-wink
So sehen Sätze aus, die montags eine vierspurige Hauptverkehrsstrasse überqueren und dabei nicht nach rechts und links schauen..

Grüße
Biber
[/OT]
Member: inspiration
inspiration Feb 14, 2011 at 14:30:23 (UTC)
Goto Top
ÜBERSETZER:

text-alt.txt schaut so aus.

11111 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1
11114 Punisher, The Columbia SPHE [ Video DV B 25 25 0
11115 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1
11116 Punisher, The Columbia SPHE [ Video DV B 25 25 0

(11112 + 11113 fehlen)

text-neu.txt schau so aus

11111 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1
11112 Punisher, The Columbia SPHE [ Video DV B 25 25 0
11113 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1
11114 Punisher, The Columbia SPHE [ Video DV B 25 25 0

(11115+11116 fehlen)

unterscheid.txt sieht dann wie folgt aus:

11111 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1
11114 Punisher, The Columbia SPHE [ Video DV B 25 25 0

also er zeigt nur das an, was in beiden gleich ist !!

(habe mir meinen text auch nochmal durchgelesen, und wüßte auch nicht, was ich damit mein, HEHE)
Member: bastla
bastla Feb 14, 2011 at 14:43:39 (UTC)
Goto Top
Hallo inspiration!

Sorry - in beiden Versionen entsteht mit diesen Testdaten bei mir überhaupt keine "Unterschied.txt":
D:\>type text-alt.txt
11111 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1
11114 Punisher, The Columbia SPHE [ Video DV B 25 25 0
11115 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1
11116 Punisher, The Columbia SPHE [ Video DV B 25 25 0

D:\>type text-neu.txt
11111 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1
11112 Punisher, The Columbia SPHE [ Video DV B 25 25 0
11113 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1
11114 Punisher, The Columbia SPHE [ Video DV B 25 25 0

D:\>auswertung
11111 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1
11114 Punisher, The Columbia SPHE [ Video DV B 25 25 0
11115 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1
11116 Punisher, The Columbia SPHE [ Video DV B 25 25 0
11111 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1
11112 Punisher, The Columbia SPHE [ Video DV B 25 25 0
11113 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1
11114 Punisher, The Columbia SPHE [ Video DV B 25 25 0

D:\>type alt.txt
11115 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1
11116 Punisher, The Columbia SPHE [ Video DV B 25 25 0

D:\>type neu.txt
11112 Punisher, The Columbia SPHE [ Video DV B 25 25 0
11113 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1

D:\>type unterschied.txt
Das System kann die angegebene Datei nicht finden.
Grüße
bastla
Member: inspiration
inspiration Feb 14, 2011 at 16:03:41 (UTC)
Goto Top
Deine Änderung habe ich natürlich nicht gelesen. Wollte gerade nochmal die Daten vom 1.Post kopieren und dann habe ich die änderung erst gesehn.

Was soll ich sagen ? GENIAL.

Ich kann meinen Dank hier nicht genug ausdrücken. Ich bin einfach nur baff.

Mir fehlen echt die Worte. Heute angemeldet, freundlich empfangen worden und SOFORT geholfen.
Das findet man sehr wenig heutzutage,

VIELEN VIELEN DANK !!!!!
Member: inspiration
inspiration Feb 14, 2011 at 17:50:33 (UTC)
Goto Top
Folgendes Problem gibt es leider doch noch:

text-alt.txt

11111 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1
11114 Punisher, The Columbia SPHE [ Video DV B 25 25 0
11115 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1
11116 Punisher, The Columbia SPHE [ Video DV B 25 25 0

text-neu.txt

11111 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1
11114 Punisher, The Columbia SPHE [ Video DV B 25 25 0
11115 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1
11116 Punisher, The Columbia SPHE [ Video DV B 25 25 0

(also beide Dateien komplett identisch)

bekomme ich eine Unterschied.txt mit folgendem Inhalt:

11116 Punisher, The Columbia SPHE [ Video DV B 25 25 0
Member: bastla
bastla Feb 14, 2011 at 18:26:10 (UTC)
Goto Top
Hallo inspiration!

Bis ich mir das genauer angesehen habe, ein Woraround: Füge als Zeile 12 ein:
fc "%Alt%" "%Neu%">nul && goto :eof
Damit wird ein Vergleich der beiden Gesamtdateien vorgenommen und bei Gleichheit der Batch beendet.

Grüße
bastla
Member: bastla
bastla Feb 14, 2011 at 19:09:34 (UTC)
Goto Top
Nachtrag: Das Problem dürfte darauf zurückzuführen sein, dass die jeweilige letzte Zeile nicht mit einer Zeilenschaltung endet - das sollte sich aber möglichst bereits bei der Entstehung der Dateien entsprechend ändern lassen ...

Anzumerken wäre übrigens noch, dass das Trennzeichen in den verwendeten Beispielen nicht ";", sondern ein Leerzeichen war - insofern wäre (der Ordnung halber, aber auf jeden Fall, wenn es Nummern mit unterschiedlicher Stellenanzahl gäbe) die Zeile 7 entsprechend anzupassen.

Grüße
bastla
Member: inspiration
inspiration Feb 14, 2011 at 20:35:09 (UTC)
Goto Top
Wie kann ich das mit der Zeilenschaltung ändern ?
Member: bastla
bastla Feb 14, 2011 at 20:40:52 (UTC)
Goto Top
Hallo inspiration!

Woher stammen die Dateien, wie entstehen sie? Dort wäre der richtige Ansatzpunkt ...

Grüße
bastla
Member: inspiration
inspiration Feb 14, 2011 at 20:44:12 (UTC)
Goto Top
Ich bekomme diese Daten nur bereit gestellt. Habe aber keinerlei Einfluss auf die Entstehung !!!
Member: bastla
bastla Feb 14, 2011 at 20:45:04 (UTC)
Goto Top
Dann könntest Du mit
echo\>>"text-alt.txt"
eine Zeilenschaltung hinzufügen (Achtung: 2 ">" sowie keine Leerzeichen!) ...

In den Batch integriert etwa so:
@echo off & setlocal
set "AltOriginal=D:\text-alt.txt"  
set "NeuOriginal=D:\text-neu.txt"  
set "DiffAlt=D:\alt.txt"  
set "DiffNeu=D:\neu.txt"  
set "Diff=D:\Unterschied.txt"  
set "Delim=;"  

set "Alt=%temp%\text-alt.tmp"  
set "Neu=%temp%\text-neu.tmp"  
copy "%AltOriginal%" "%Alt%">nul  
copy "%NeuOriginal%" "%Neu%">nul  
echo\>>"%Alt%"  
echo\>>"%Neu%"  

del "%DiffAlt%" 2>nul  
del "%DiffNeu%" 2>nul  
del "%Diff%" 2>nul  

for /f "usebackq delims=" %%i in ("%Alt%") do echo %%i & findstr /x /c:"%%i" "%Neu%">nul || (  
    for /f "delims=%Delim%" %%a in ("%%i") do (  
        findstr /b /c:"%%a%Delim%" "%Neu%">nul || (>>"%DiffAlt%" echo %%i)  
    )
)

for /f "usebackq delims=" %%i in ("%Neu%") do echo %%i & findstr /x /c:"%%i" "%Alt%">nul || (  
    for /f "delims=%Delim%" %%a in ("%%i") do (  
        findstr /b /c:"%%a%Delim%" "%Alt%">nul && (>>"%Diff%" echo %%i) || (>>"%DiffNeu%" echo %%i)  
    )
)
del "%Alt%"  
del "%Neu%"  
Auf diese Art wird nur mit temporären Kopien der Orignialdateien gearbeitet.

Grüße
bastla
Member: inspiration
inspiration Feb 15, 2011 at 06:56:17 (UTC)
Goto Top
Aber leider bleibt das Problem mit der unterschied.txt bestehen.
Member: bastla
bastla Feb 15, 2011 at 10:37:08 (UTC)
Goto Top
Hallo inspiration!

Dass Deine (wie die mir zugesandten Beispieldaten zeigen) Zeilen >= 1500 Zeichen umfassen können (was zwar die oben getätigte Aussage
jede Zeile schätzungsweise mit mind. 60 Zeichen.
nicht falsifiziert, aber doch etwas unvermutet kommt) und damit "findstr" überfordern, hättest Du anhand der Fehlermeldungen
FINDSTR: Suchzeichenfolge zu lang.
eigentlich schon herausfinden können ...

Damit ist dann Batch aber nicht mehr unbedingt das geeignetste Werkzeug - ich werde das später mal mit VBS versuchen ...

Grüße
bastla
Member: bastla
bastla Feb 15, 2011 at 12:19:40 (UTC)
Goto Top
Hallo inspiration!

Versuch es mit der VBS-Variante:
Alt = "text-alt.txt"  
Neu = "text-neu.txt"  
DiffAlt = "alt.txt"  
DiffNeu = "neu.txt"  
Diff = "unterschied.txt"  
Delim = ";"  

Set fso = CreateObject("Scripting.FileSystemObject")  
Set a = CreateObject("Scripting.Dictionary")  

Set Datei = fso.OpenTextFile(Alt)
Do Until Datei.AtEndOfStream 'alle "alten" Sätze in Dictionary mit "Nummer" (=1. Feld) als Key aufnehmen  
    Satz = Datei.ReadLine
    Nummer = Split(Satz, Delim)(0)
    a.Add Nummer, Satz
Loop
Datei.Close

Set NeuAus = fso.CreateTextFile(DiffNeu)
Set DiffAus = fso.CreateTextFile(Diff)
Set Datei = fso.OpenTextFile(Neu)
Do Until Datei.AtEndOfStream 'alle neuen Sätze einlesen und gleich auswerten  
    Satz = Datei.ReadLine
    Nummer = Split(Satz, Delim)(0)
    If Not a.Exists(Nummer) Then '"neuer" Satz  
        NeuAus.WriteLine Satz 'in Datei schreiben  
    Else
        If Satz <> a.Item(Nummer) Then DiffAus.WriteLine(Satz) '"veränderter" Satz  
        a.Remove(Nummer) 'Satz erledigt und daher aus Dictionary entfernen  
    End If
Loop
Datei.Close
DiffAus.Close
NeuAus.Close

fso.CreateTextFile(DiffAlt).Write Join(a.Items, vbCrLf) & vbCrLf 'verbliebene "alte" Sätze schreiben  
Grüße
bastla
Member: inspiration
inspiration Feb 15, 2011 at 12:36:53 (UTC)
Goto Top
WOW, was soll man dazu sagen.

ES GEHT !!!!!!!!! GENIAL !!!!! BIG THX !!!!!!!!!

Genervt habe ich OHNE ENDE, desto überraschter war ich eigentlich, das noch weiter geholfen wird.

Wie gesagt, trifft man kaum noch heut zu tage !!!!!!!!!!!!
Member: inspiration
inspiration Feb 15, 2011 at 22:20:09 (UTC)
Goto Top
Jetzt habe ich nich ein kleines Problem.

Wie kann ich jetzt in einer Bat Datei mehrere VBS starten ?

Mein Problem:

Habe dein Script als VBS angelegt. geht auch super.

Erstelle ich eine bat Datei wo das Script gestartet werden soll, funktionierts auch.

Erstelle ich jetzt eine Bat Datei, in der 2x das Script (an unterschiedlichen stellen) zum ausführen angesprochen wird, gibts ne Fehlermeldung.

Danke schon mal für Eure Antworten.
Member: inspiration
inspiration Feb 16, 2011 at 07:26:31 (UTC)
Goto Top
Oki, problem gelöst.

Sobald ich eine Bat Datei erstelle, muss in der VBS Datei für die vorhandenen Dateien ("text-alt.txt" und "text-neu.txt" ) der komplette Pfad angegeben werden.

Also: z.B.: Alt = "d:\administrator\text-alt.txt" und Neu = "d:\administrator\text-neu.txt"