Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Textdateien vergleichen und fehlende Zeilen in neuer Datei ausgeben

Frage Entwicklung Batch & Shell

Mitglied: Laily89

Laily89 (Level 1) - Jetzt verbinden

10.09.2010 um 16:05 Uhr, 5059 Aufrufe, 31 Kommentare

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
31 Antworten
Mitglied: bastla
10.09.2010 um 16:44 Uhr
Hallo Laily89 und willkomme im Forum!

Sollten die Zeilen in Deinen Dateien nicht wie dargestellt eine lfd Nr enthalten, also etwa:
01.
BEFEHL_A 
02.
BEFEHL_B 
03.
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
Bitte warten ..
Mitglied: Laily89
13.09.2010 um 09:13 Uhr
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
Bitte warten ..
Mitglied: inspiration
13.02.2011 um 23:58 Uhr
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ß
Bitte warten ..
Mitglied: bastla
14.02.2011 um 07:19 Uhr
Hallo inspiration und willkommen im Forum!

Teil 1 Deiner Frage ist soweit nachvollziehbar und etwa so zu lösen:
01.
findstr /v /g:"D:\text-alt.txt" "D:\text-neu.txt">"D:\neu.txt" 
02.
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
Bitte warten ..
Mitglied: inspiration
14.02.2011 um 07:29 Uhr
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.
Bitte warten ..
Mitglied: bastla
14.02.2011 um 11:39 Uhr
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
Bitte warten ..
Mitglied: inspiration
14.02.2011 um 12:13 Uhr
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.
Bitte warten ..
Mitglied: bastla
14.02.2011 um 12:25 Uhr
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
Bitte warten ..
Mitglied: inspiration
14.02.2011 um 13:33 Uhr
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ß
Bitte warten ..
Mitglied: bastla
14.02.2011 um 13:51 Uhr
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
Bitte warten ..
Mitglied: inspiration
14.02.2011 um 14:04 Uhr
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)
Bitte warten ..
Mitglied: bastla
14.02.2011 um 14:50 Uhr
Hallo inspiration!

Das sollte dann so gehen (bzw eher kriechen ):
01.
@echo off & setlocal 
02.
set "Alt=D:\text-alt.txt" 
03.
set "Neu=D:\text-neu.txt" 
04.
set "DiffAlt=D:\alt.txt" 
05.
set "DiffNeu=D:\neu.txt" 
06.
set "Diff=D:\Unterschied.txt" 
07.
set "Delim=;" 
08.
 
09.
del "%DiffAlt%" 2>nul 
10.
del "%DiffNeu%" 2>nul 
11.
del "%Diff%" 2>nul 
12.
 
13.
for /f "usebackq delims=" %%i in ("%Alt%") do echo %%i & findstr /x /c:"%%i" "%Neu%">nul || ( 
14.
    for /f "tokens=1* delims=%Delim%" %%a in ("%%i") do ( 
15.
        findstr /b "%%a%Delim%" "%Neu%">nul && (>>"%Diff%" echo %%i) || (>>"%DiffAlt%" echo %%i) 
16.
17.
18.
 
19.
for /f "usebackq delims=" %%i in ("%Neu%") do echo %%i & findstr /x /c:"%%i" "%Alt%">nul || ( 
20.
    for /f "tokens=1* delims=%Delim%" %%a in ("%%i") do ( 
21.
        findstr /b "%%a%Delim%" "%Alt%">nul || (>>"%DiffNeu%" echo %%i) 
22.
23.
)
Zur Information wird jede verarbeitete Zeile auf dem Bildschirm ausgegeben ...

Grüße
bastla
Bitte warten ..
Mitglied: inspiration
14.02.2011 um 15:11 Uhr
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.
Bitte warten ..
Mitglied: bastla
14.02.2011 um 15:19 Uhr
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?
[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:
01.
for /f "usebackq delims=" %%i in ("%Alt%") do echo %%i & findstr /x /c:"%%i" "%Neu%">nul || ( 
02.
    for /f "delims=%Delim%" %%a in ("%%i") do ( 
03.
        findstr /b "%%a%Delim%" "%Neu%">nul || (>>"%DiffAlt%" echo %%i) 
04.
05.
06.
 
07.
for /f "usebackq delims=" %%i in ("%Neu%") do echo %%i & findstr /x /c:"%%i" "%Alt%">nul || ( 
08.
    for /f "delims=%Delim%" %%a in ("%%i") do ( 
09.
        findstr /b "%%a%Delim%" "%Alt%">nul && (>>"%Diff%" echo %%i) || (>>"%DiffNeu%" echo %%i) 
10.
11.
)
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 ) ...
[/Edit]

Grüße
bastla
Bitte warten ..
Mitglied: Biber
14.02.2011 um 15:26 Uhr
[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?
So sehen Sätze aus, die montags eine vierspurige Hauptverkehrsstrasse überqueren und dabei nicht nach rechts und links schauen..

Grüße
Biber
[/OT]
Bitte warten ..
Mitglied: inspiration
14.02.2011 um 15:30 Uhr
Ü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)
Bitte warten ..
Mitglied: bastla
14.02.2011 um 15:43 Uhr
Hallo inspiration!

Sorry - in beiden Versionen entsteht mit diesen Testdaten bei mir überhaupt keine "Unterschied.txt":
01.
D:\>type text-alt.txt 
02.
11111 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1 
03.
11114 Punisher, The Columbia SPHE [ Video DV B 25 25 0 
04.
11115 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1 
05.
11116 Punisher, The Columbia SPHE [ Video DV B 25 25 0 
06.
 
07.
D:\>type text-neu.txt 
08.
11111 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1 
09.
11112 Punisher, The Columbia SPHE [ Video DV B 25 25 0 
10.
11113 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1 
11.
11114 Punisher, The Columbia SPHE [ Video DV B 25 25 0 
12.
 
13.
D:\>auswertung 
14.
11111 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1 
15.
11114 Punisher, The Columbia SPHE [ Video DV B 25 25 0 
16.
11115 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1 
17.
11116 Punisher, The Columbia SPHE [ Video DV B 25 25 0 
18.
11111 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1 
19.
11112 Punisher, The Columbia SPHE [ Video DV B 25 25 0 
20.
11113 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1 
21.
11114 Punisher, The Columbia SPHE [ Video DV B 25 25 0 
22.
 
23.
D:\>type alt.txt 
24.
11115 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1 
25.
11116 Punisher, The Columbia SPHE [ Video DV B 25 25 0 
26.
 
27.
D:\>type neu.txt 
28.
11112 Punisher, The Columbia SPHE [ Video DV B 25 25 0 
29.
11113 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1 
30.
 
31.
D:\>type unterschied.txt 
32.
Das System kann die angegebene Datei nicht finden.
Grüße
bastla
Bitte warten ..
Mitglied: inspiration
14.02.2011 um 17:03 Uhr
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 !!!!!
Bitte warten ..
Mitglied: inspiration
14.02.2011 um 18:50 Uhr
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
Bitte warten ..
Mitglied: bastla
14.02.2011 um 19:26 Uhr
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
Bitte warten ..
Mitglied: bastla
14.02.2011 um 20:09 Uhr
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
Bitte warten ..
Mitglied: inspiration
14.02.2011 um 21:35 Uhr
Wie kann ich das mit der Zeilenschaltung ändern ?
Bitte warten ..
Mitglied: bastla
14.02.2011 um 21:40 Uhr
Hallo inspiration!

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

Grüße
bastla
Bitte warten ..
Mitglied: inspiration
14.02.2011 um 21:44 Uhr
Ich bekomme diese Daten nur bereit gestellt. Habe aber keinerlei Einfluss auf die Entstehung !!!
Bitte warten ..
Mitglied: bastla
14.02.2011 um 21:45 Uhr
Dann könntest Du mit
echo\>>"text-alt.txt"
eine Zeilenschaltung hinzufügen (Achtung: 2 ">" sowie keine Leerzeichen!) ...

In den Batch integriert etwa so:
01.
@echo off & setlocal 
02.
set "AltOriginal=D:\text-alt.txt" 
03.
set "NeuOriginal=D:\text-neu.txt" 
04.
set "DiffAlt=D:\alt.txt" 
05.
set "DiffNeu=D:\neu.txt" 
06.
set "Diff=D:\Unterschied.txt" 
07.
set "Delim=;" 
08.
 
09.
set "Alt=%temp%\text-alt.tmp" 
10.
set "Neu=%temp%\text-neu.tmp" 
11.
copy "%AltOriginal%" "%Alt%">nul 
12.
copy "%NeuOriginal%" "%Neu%">nul 
13.
echo\>>"%Alt%" 
14.
echo\>>"%Neu%" 
15.
 
16.
del "%DiffAlt%" 2>nul 
17.
del "%DiffNeu%" 2>nul 
18.
del "%Diff%" 2>nul 
19.
 
20.
for /f "usebackq delims=" %%i in ("%Alt%") do echo %%i & findstr /x /c:"%%i" "%Neu%">nul || ( 
21.
    for /f "delims=%Delim%" %%a in ("%%i") do ( 
22.
        findstr /b /c:"%%a%Delim%" "%Neu%">nul || (>>"%DiffAlt%" echo %%i) 
23.
24.
25.
 
26.
for /f "usebackq delims=" %%i in ("%Neu%") do echo %%i & findstr /x /c:"%%i" "%Alt%">nul || ( 
27.
    for /f "delims=%Delim%" %%a in ("%%i") do ( 
28.
        findstr /b /c:"%%a%Delim%" "%Alt%">nul && (>>"%Diff%" echo %%i) || (>>"%DiffNeu%" echo %%i) 
29.
30.
31.
del "%Alt%" 
32.
del "%Neu%"
Auf diese Art wird nur mit temporären Kopien der Orignialdateien gearbeitet.

Grüße
bastla
Bitte warten ..
Mitglied: inspiration
15.02.2011 um 07:56 Uhr
Aber leider bleibt das Problem mit der unterschied.txt bestehen.
Bitte warten ..
Mitglied: bastla
15.02.2011 um 11:37 Uhr
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
Bitte warten ..
Mitglied: bastla
15.02.2011 um 13:19 Uhr
Hallo inspiration!

Versuch es mit der VBS-Variante:
01.
Alt = "text-alt.txt" 
02.
Neu = "text-neu.txt" 
03.
DiffAlt = "alt.txt" 
04.
DiffNeu = "neu.txt" 
05.
Diff = "unterschied.txt" 
06.
Delim = ";" 
07.
 
08.
Set fso = CreateObject("Scripting.FileSystemObject") 
09.
Set a = CreateObject("Scripting.Dictionary") 
10.
 
11.
Set Datei = fso.OpenTextFile(Alt) 
12.
Do Until Datei.AtEndOfStream 'alle "alten" Sätze in Dictionary mit "Nummer" (=1. Feld) als Key aufnehmen 
13.
    Satz = Datei.ReadLine 
14.
    Nummer = Split(Satz, Delim)(0) 
15.
    a.Add Nummer, Satz 
16.
Loop 
17.
Datei.Close 
18.
 
19.
Set NeuAus = fso.CreateTextFile(DiffNeu) 
20.
Set DiffAus = fso.CreateTextFile(Diff) 
21.
Set Datei = fso.OpenTextFile(Neu) 
22.
Do Until Datei.AtEndOfStream 'alle neuen Sätze einlesen und gleich auswerten 
23.
    Satz = Datei.ReadLine 
24.
    Nummer = Split(Satz, Delim)(0) 
25.
    If Not a.Exists(Nummer) Then '"neuer" Satz 
26.
        NeuAus.WriteLine Satz 'in Datei schreiben 
27.
    Else 
28.
        If Satz <> a.Item(Nummer) Then DiffAus.WriteLine(Satz) '"veränderter" Satz 
29.
        a.Remove(Nummer) 'Satz erledigt und daher aus Dictionary entfernen 
30.
    End If 
31.
Loop 
32.
Datei.Close 
33.
DiffAus.Close 
34.
NeuAus.Close 
35.
 
36.
fso.CreateTextFile(DiffAlt).Write Join(a.Items, vbCrLf) & vbCrLf 'verbliebene "alte" Sätze schreiben
Grüße
bastla
Bitte warten ..
Mitglied: inspiration
15.02.2011 um 13:36 Uhr
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 !!!!!!!!!!!!
Bitte warten ..
Mitglied: inspiration
15.02.2011 um 23:20 Uhr
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.
Bitte warten ..
Mitglied: inspiration
16.02.2011 um 08:26 Uhr
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"
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
VB for Applications
Mehrere Spalten Durchsuchen und Ergebnisse in neuer Tabelle Ausgeben (3)

Frage von Mr.Green zum Thema VB for Applications ...

Batch & Shell
gelöst Textdateien vergleichen BATCH (2)

Frage von FeudelFred zum Thema Batch & Shell ...

Windows Tools
Robocopy . Datei im Zielverzeichnis nur überschreiben, wenn neuer (7)

Frage von gnrmarcel zum Thema Windows Tools ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (19)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...