favor
Goto Top

2 Txt-Dateien vergleichen

Hallo
Bin noch ein Anfänger mit Batch!
Darum bräuchte ich eure Hilfe.

Also ich will 2 Txt-Dateien vergleichen. Es sollte immer pro Zeile überprüft werden. Wenn etwas übereinstimmt soll es in eine 3 Txt-Datei geschrieben werden.

Ich hoffe ihr könnt mir helfen.


gruss
Kommentar vom Moderator Biber am 04.06.2009 um 20:42:59 Uhr
Beitrag wurde zwar am 4.Juni 2009 von User Moverik wiederbelebt, aber dieser hat (richtigerweise) einen neuen Beitrag dafür eröffnet.
Diesen hier "ungelöst" geschlossen.

Content-ID: 22175

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

Ausgedruckt am: 25.11.2024 um 17:11 Uhr

Biber
Biber 23.12.2005 um 00:58:01 Uhr
Goto Top
Moin favor,

Verständnisprobleme und deshalb Rückfragen.
Also ich will 2 Txt-Dateien vergleichen.
Okay...
Es sollte immer pro Zeile überprüft werden.
Versteh ich auch noch, glaube ich.
Wenn etwas übereinstimmt soll es in eine 3 Txt-Datei geschrieben werden.
Öhm... das versteh ich nicht. Du willst nicht die Unterschiede, sondern die Gemeinsamkeit??
Na ja, wenn es für einen guten Zweck ist...
Aber dann würde ich gern die Rahmenbedingungen wissen.

- Wenn DateiA 270000 Zeilen enthielte und DateiB 3 Mio Zeilen und nur 2 Zeilen sind in beiden Dateien gleich, dann
a) könnte es einen Moment dauern
b) könnte es den einen oder anderen Batch zerreißen.
Also, von welchen zu erwartenden Größenordnungen reden wir hier
- bei ~Zeilen je Datei
- und Grad der Unterschiedlichkeit (eher 99% gleiche Zeilen als Resultat oder eher 1% Übereinstimmung)?
Denn den Algorithmus würde ich ja schon davon abhängig machen.

Ich hoffe ihr könnt mir helfen.
Da bin ich trotz allem optimistisch.

gruss
gruss zurück
favor
favor 24.12.2005 um 09:05:06 Uhr
Goto Top
Also

Ene Text-Datei hat so ungefähr <250 Zeilen.

Die Zeilen die übereinstimmen ist etwa bei 1%.

gruss
Biber
Biber 24.12.2005 um 11:38:08 Uhr
Goto Top
Okay, dann ist es machbar...

Ich habe mal zum Testen folgendes gemacht: Die Inhaltsangaben von zwei Verzeichnissen in je eine Textdatei geschrieben und anschliessend verglichen.
Angezeigt wird also, welche Dateien im ersten und zweiten Verzeichnis gleich sind.

[Vorarbeit am CMD-Prompt; befinde mich im Verzeichnis Z:\]
$cmd$ dir d:\temp\*.* >dtemp.txt
$cmd$ dir z:\*.* >z.txt

dann ist ja eigentlich nur eine Eingabezeile am CMD-Prompt;
$cmd$ For /F "delims=" %i in (dtemp.txt) do @((find "%i" z.txt >nul) && @echo %i
[Output:]
17.08.2005 04:45 975 CopyAllto.bat
21.07.2005 12:31 244.729 ReadVistaAdminPw.exe
10.12.2005 01:14 1.233 allfiles.txt
10.12.2005 01:14 602 allbats.txt

Falls Du lieber dafür eine Batchdatei haben möchtest:
:: ---snipp SameLines.bat --------------
@echo off & setlocal
if [%1]== (echo Syntax %0 datei1 datei2 [outdatei]) & goto :eof
if [%2]== (echo Syntax %0 datei1 datei2 [outdatei]) & goto :eof
If [%3]== (set "outfile=CON") else set "outfile=%3"  
For /F "delims=" %%i in (%1) do (  
  (find "%%i" %2 >nul) && echo %%i>>%outfile% )  
:: ---snapp SameLines.bat ----------------
Syntax (1): -----------> selbes Ergebnis wie oben; Output auf Bildschirm
$cmd$d:SameLines.bat dtemp.txt z.txt

Syntax (2): -----> selbes Ergebnis wie oben; Output in Datei "Matching.txt"
$cmd$d:SameLines.bat dtemp.txt z.txt Matching.txt

Gruss
Biber
Biber 29.12.2005 um 02:31:10 Uhr
Goto Top
Komisch, favor,
bei mir läuft dieser Batch.
Was genau funktioniert denn bei Dir nicht?

Grüße
Biber
6741
6741 13.02.2007 um 19:13:25 Uhr
Goto Top
hi ...

ich klinke mir mal ein ...

wie vergleiche ich den Inhalt zweier TXT Datein und wenn er Unterschiedlich ist soll eine Email schrieben werden ...

vielen DANK
Biber
Biber 13.02.2007 um 19:39:19 Uhr
Goto Top
Moin fwd,

das sollte noch umkompzierter sein:
-das senden einer Mail von der Konsole aus mit Blat.exe ist mehrfach hier im Forum beschreiben

und der Rest reduziert sich auf ein...
fc datei1.xyz datei2.xyz >nul && blat [blat-Parameter]

Siehe "help fc" oder "fc /?"

Gruss
Biber
6741
6741 13.02.2007 um 20:03:59 Uhr
Goto Top
shit ist das einfach ...

kann man auch den Unterschied in eine txt Datei piepen .... ?
6741
6741 13.02.2007 um 20:47:14 Uhr
Goto Top
dat geht nicht ...

ich habe ein dir.txt erstellt, kopiert und umbenannt.

Dann eine Zeile hinzugefügt und verglichen zwischen neu und alt. Dachte er gibt mir dir geänderte bzw neue Zeile aus. Dabei bekomme ich:
*
Vergleichen der Dateien ftp_neu.txt und FTP_ALT.TXT
* ftp_neu.txt
10.01.2007 16:36 <DIR> Ape Escape Racer
01.10.2007 TEST TEST
09.01.2007 20:14 <DIR> Blocks Club
* FTP_ALT.TXT
10.01.2007 16:36 <DIR> Ape Escape Racer
09.01.2007 20:14 <DIR> Blocks Club
*

* ftp_neu.txt
14 Datei(en) 122.665.226 Bytes
77 Verzeichnis(se), 38.746.632.192 Bytes frei
* FTP_ALT.TXT
14 Datei(en) 122.665.226 Bytes
77 Verzeichnis(se), 38.747.418.624 Bytes frei

***

möchte aber nur den Unterschied bekommt ...

selbstredent, ich habe dahinter ein

dif.txt

das ist der Ausschnitt ...

TEST TEST ist von mir geändert worden und sollte erkannt werden.

gruß
Biber
Biber 13.02.2007 um 22:42:01 Uhr
Goto Top
Na gut, fwd,

eigentlich erfinde ich ja nicht so gerne Räder zum 857ten Mal... da sollten doch schon fertige Tools von begnadeteren Codern rumgeistern...
So neu kann doch das Problem "Unterschiedliche Zeilen in Textdateien anzeigen" nun nicht sein.

Aber spasshalber, wenn es noch gar nix gäbe, wenn wir hier auf dem Acker anfangen müssten, was wäre denn Dein Plan zur Darstellung?

Wenn wie auf die sinnvollere "dir /b /s"-Darstellung zurückgehen, damit wir nur die eigentlichen Änderungen sehen und nicht die Folge-Änderungen (Freierplatz und Gesamtbyte etc.),
bleiben dennoch mindestens 4 Fälle, wenn es z.B. um die Directory-Inhalte früher/jetzt auf irgendeinem Laufwerk geht:
a) In der Liste VORHER.txt gibt es eine Zeile, die es in Liste JETZT.txt nicht (mehr) gibt.
[Datei ist JETZT nicht mehr da]
b) In der Liste JETZT.txt gibt es eine Zeile, die es in Liste VORHER.txt (noch) nicht gibt.
[Datei gab es VORHER noch nicht]
c) Eine Zeile (i.e. Pfad\Dateiname) existiert schon in beiden, aber mit geänderter Größe/Uhrzeit
d) Es sind so unterschiedliche VORHER/JETZT-Listen, dass es kaum/keine "gleiche" Zeilen gibt und eine Visualisierung der Unterschiede Dönekens wäre.

Anyhow, firewalldevil, wenn wir gemeinsam darüber meditieren wollen, dann spiel ich Dir den ersten Ball zu:

Wie sollen die ersten drei Fälle konkret als Unterschiede visualisiert werden in der Bildschirm/Dateiausgabe??

In Ruhe Tee trinkend
Biber

[ Lässt sich abfangen]
6741
6741 14.02.2007 um 11:29:17 Uhr
Goto Top
okay let´s play ... ;>)))

1. Fall:

Systemstart, nichts wurde geändert. Batch überprüft aber. Ausgabe dir_neu.txt ist gegenüber der Ausgabe dir_alt.txt ( weil txt umbenannt wurde, nach Prüfung von neu nach alt somit kann ein erneuter Test erfoglen ) völlig gleich, also darf nicht passieren. Kein Mail, alles okay.

2. Fall

System läuft und eine Datei wurde geändert bzw ein Verzeichniss hinzugefügt. Sobald die Batch läuft, ob beim Start oder einfach nur so, muss erkannt werden, das es eine Änderung gegeben hat. Dir_neu.txt hat jetzt einen Ordner mehr und soll den in die dif.txt Ausgegeben. Die dif.txt versende ich dann mit sendemail.

Das klappt auch, aber ich sehen mehr als ich möchte ...

Evtl sollte mann alles ausser die DIR Verzeichnisse ausfiltern und dann vergleichen. Denn ich möchte nur das geänderte haben nur nicht andere informationen.

so long ..

fwd

EDIT: nach erneuten TESTs

mein Filter sieht jetzt so aus:

dir /s c:\Daten\ > C:\dir\dir.txt

find /i "DIR" dir.txt >dir1.txt

find /v /i "<DIR> ." dir1.txt >dir2.txt

type dir2.txt|find /v /i "----------">dir5.txt


dann habe ich nur die Dir Verzeichnisse ...

die dir.txt steht für die dif.txt Datei, als test ... halt
Moverik
Moverik 04.06.2009 um 13:08:08 Uhr
Goto Top
Hallo,

Ich grabe diesen alten Thread mal wieder aus, da er gut zu meinem Problem passt.

Ich will auch zwei Dateien miteinander vergleichen und die Unterschiede dann weiterverarbeiten.

Ich habe zwei DIR Listen die verglichen werden. Nach dem Vergleich wird eine neue TXT Datei erzeugt in welche die die neuen Ordner mit Pfaden drin stehen. Wenn ich das mit dem FC Befehl mache steht in der neuen Datei aber noch viel andere Kram, und ich weiß nicht wie ich nur die neuen Dateipfade aus der TXT gepflückt bekomme um sie in eine Variable zu schreiben.
Kann mir da einer helfen?