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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
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.
Diesen hier "ungelöst" geschlossen.
Content-ID: 22175
Url: https://administrator.de/contentid/22175
Ausgedruckt am: 25.11.2024 um 17:11 Uhr
11 Kommentare
Neuester Kommentar
Moin favor,
Verständnisprobleme und deshalb Rückfragen.
Ö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.
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.
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
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:
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
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 ----------------
$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
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
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
shit ist das einfach ...
kann man auch den Unterschied in eine txt Datei piepen .... ?
kann man auch den Unterschied in eine txt Datei piepen .... ?
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
das ist der Ausschnitt ...
TEST TEST ist von mir geändert worden und sollte erkannt werden.
gruß
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ß
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]
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]
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
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
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?
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?