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

Zwei Textdateien vergleichen und Unterschiede filtern

Frage Entwicklung Batch & Shell

Mitglied: JuliaB

JuliaB (Level 1) - Jetzt verbinden

15.09.2006, aktualisiert 09.10.2008, 26476 Aufrufe, 17 Kommentare

Hallo ihr Lieben!

ich habe zwei Textdateien vorliegen, die zu unterschiedlichen Zeitpunkten erstellt wurden. In diesen Dateien stehen lauter Verzeichnisnamen. Ich soll nun diese beiden Dateien mittels Batch-Befehlen vergleichen und die Unterschiede der beiden Dateien in eine dritte Datei schreiben.

ich versuche mein Problem mal zu veranschaulichen:

Text1.txt
A
B
C
D
E
F

Text2.txt
A
B
C
D

In der dritten Datei sollte also nur E und F stehen.

Meine Versuche sind bisher alle gescheitert. Ich dachte mir, dass ich das mit zwei geschachtelten For-Schleifen machen kann. Die eine For Schleife geht die eine Datei durch und ruft für jeden Eintrag eine weitere for Schleife auf, die dann die andere Text-Datei vergleicht.

@FOR /f %%a in (Verzeichnisse_alt.txt) do @CALL test2.bat %%a

und

@FOR /f %%b in (Verzeichnisse.txt) do @IF (%%b) == (%%1) (goto Ja) ELSE (goto Nein)

:Ja
@echo Vorhanden

:Nein
@echo Nein


Irgendwie gibt mir das aber immer beide Faelle aus.
Gibt es da eventuell einen Weg, wie ich zu meinem Ziel komme? Ich bin da grad ziemlich ratlos((

Viele Gruesse
die Julia
Mitglied: miniversum
15.09.2006 um 13:46 Uhr
Das einfachste:
fc Text1.txt Text2.txt > Unterschiede.txt

Hilft das?

miniversum
Bitte warten ..
Mitglied: JuliaB
15.09.2006 um 13:50 Uhr
Hallo miniversum,

vielen Dank fuer deine Antwort, aber leider bringt mich das nicht weiter, da ich nur die Zeilen brauche und nicht die genauen Veränderungen.

Liebe Gruesse
die Julia
Bitte warten ..
Mitglied: miniversum
15.09.2006 um 14:03 Uhr
mit fc /N kannst du dir die Zeilennummern anzeigen lassen.
Vielleicht bringt dich das weiter?

miniversum
Bitte warten ..
Mitglied: JuliaB
15.09.2006 um 14:07 Uhr
Hey du,

leider nicht.
Ich braeuchte in Unterschied.txt einfach einen Eintrag wie:

E
F

und nicht wie bei fc:


* Text1.txt
1: A
2: B
3: C
* Text2.txt
1: A
2: B
*
usw...

Sorry, das hilft mir leider nicht wirklich weiter

Aber danke fuer deine Bemühungen!


Liebe Gruesse
die Julia
Bitte warten ..
Mitglied: geTuemII
15.09.2006 um 14:18 Uhr
Hallo Julia,

wenn es auch was vorgefertigtes sein darf, empfehle ich UltraEdit: UltraEdit32 Beschreibung und Testversion

Die darin enthaltete abgespeckte UlraCompare (blaues rundes Icon in der Leiste) sollte für deine Zwecke völlig ausreichend sein.

geTuemII
Bitte warten ..
Mitglied: miniversum
15.09.2006 um 14:20 Uhr
Also zu deinem Ansatz:
beim
:Ja
@echo Vorhanden
würd ich noch ein goto eof dranhängen, da sonst das Skript weiter läuft und den :Nein Fall reinläuft. Daher die beiden Ausgaben bei dir.
Also:

:Ja
@echo Vorhanden
goto eof

:Nein
@echo Nein

miniversum
Bitte warten ..
Mitglied: Biber
21.09.2006 um 20:20 Uhr
Moin Julia,
ich würde da nicht gleich mit so großen Kanonen auf den kleinen Spatz schießen....
Am CMD-Prompt:
01.
>for /f "delims=" %i in (verzeichnisse.txt) do @Findstr "%i" verzeichnisse_alt.txt >nul && @echo %i
Diese Variante bringt alle "Zeilen", also bei Dir Ordnernamen oder Dateinamen, die es auch in verzeichnisse_alt.txt gibt.

Andersrum:
01.
>for /f "delims=" %i in (verzeichnisse.txt) do @Findstr "%i" verzeichnisse_alt.txt >nul || @echo %i
Diese Variante bringt alle Ordnernamen oder Dateinamen, die es NICHT in verzeichnisse_alt.txt gibt.
Genau genommen brauchst Di ja auch nur ein "Verzeichnisse_alt.txt".. das aktuelle Verzeichnis hast Du ja ohnehin..
01.
>for /f "delims=" %i in ('dir /b /a:d ') do @Findstr "%i" verzeichnisse_alt.txt >nul || @echo %i
Was brauchst Du denn noch für Kombinationen?

Gruß
Biber
Bitte warten ..
Mitglied: combat
08.10.2008 um 11:36 Uhr
Hallo Biber,

ich habe das gleiche Problem wie zuvor beschrieben, nur kommen ich mit deiner Lösung nicht ganz zurecht.
Wenn ich die zweite Variante verwende:

for /f "delims=" %i in (c:\Protokolle\verzeichnisse.txt) do @Findstr "%i" c:\Protokolle\verzeichnisse_alt.txt >nul || @echo %i

dann zeigt er den Inhalt von c:\Protokolle\verzeichnisse.txt:
c:\test\Bild3.JPG
c:\test\verz1\bild1.JPG
c:\test\verz2\Bild2.JPG
c:\test\verz2\Bild3.JPG

Inhalt von c:\Protokolle\verzeichnisse.txt:
c:\test\Bild3.JPG
c:\test\verz1\bild1.JPG
c:\test\verz2\Bild2.JPG
c:\test\verz2\Bild3.JPG

Inhalt von c:\Protokolle\verzeichnisse_alt.txt :
c:\test\Bild3.JPG
c:\test\verz1\bild1.JPG
c:\test\verz2\Bild2.JPG

was mache ich falsch?

Gruß combat
Bitte warten ..
Mitglied: Biber
08.10.2008 um 19:24 Uhr
Moin combat,

ergänze bitte noch den FindStr-Parameter /C: , dann sollte es besser laufen.
01.
(=19:22:19  E:\Schnipsel=) 
02.
## in verzeichnisse.txt, nicht in Verzeichnisse_alt.txt 
03.
>for /f "delims=" %i in (verzeichnisse.txt) do @findstr  /i /C:"%i" verzeichnisse_alt.txt>nul || @echo %i 
04.
c:\test\verz2\Bild3.JPG 
05.
## in verzeichnisse.txt UND auch in Verzeichnisse_alt.txt 
06.
(=19:22:34  E:\Schnipsel=) 
07.
>for /f "delims=" %i in (verzeichnisse.txt) do @findstr  /i /C:"%i" verzeichnisse_alt.txt>nul && @echo %i 
08.
c:\test\Bild3.JPG 
09.
c:\test\verz1\bild1.JPG 
10.
c:\test\verz2\Bild2.JPG
Grüße
Biber
Bitte warten ..
Mitglied: combat
09.10.2008 um 12:42 Uhr
Hi Biber,

danke für deine Hilfe.
Jetzt funktioniert es.

Danke
Gruß combat
Bitte warten ..
Mitglied: juergi69
08.01.2009 um 13:06 Uhr
Hallo Biber,
ich würde auch nur den Unterschied zw. zwei Dateien brauchen.

A.txt
a
b
c
d
e

B.txt
c
d
e
f

ergebnis.txt
a
b
f

vielleicht hast Du eine Lösung

lg
Jürgen
Bitte warten ..
Mitglied: Biber
08.01.2009 um 17:38 Uhr
Moin juergi69,

so'n Drömelkrams kannst Du direkt vom CMD-Prompt aus abpfriemeln:
[Einzugebende Zeilen beginnen mit ">"; Demo mit Deinen Dateien A.txt und B.txt im Verzeichnis e:\work]
01.
E:\Work> 
02.
>findstr /v /g:b.txt a.txt & findstr /v /g:a.txt b.txt 
03.
04.
05.
06.
E:\Work> 
07.
>(findstr /v /g:b.txt a.txt & findstr /v /g:a.txt b.txt) >ergebnis.txt 
08.
 
09.
E:\Work> 
10.
>type ergebnis.txt 
11.
12.
13.
f
Hilfe unter FindStr /? am CMD-Prompt oder 0900 4711 4711 für 86 Eur/Min

Grüße
Biber
Bitte warten ..
Mitglied: pmaterina
20.04.2012 um 10:38 Uhr
Gude,

bin neu im Forum und muss gleih einmal einen alten Post rauskramen

die von Biber angegeben Zeile

>for /f "delims=" %i in (verzeichnisse.txt) do @Findstr "%i" verzeichnisse_alt.txt >nul || @echo %i

funktioniert soweit auch-schonmal Danke dafür-, jedoch nicht so, wie ich es mir vorgestellt habe:

wenn ich in 1.txt folgende Informationen habe:

00001
002
00003

und in 2.txt:

00001
00002
00003

und mir die "Unterschiede in 3.txt augeben lasse,
gibt es keine!

Ist mir auch soweit einleuchtend...

Kennt jemand eine möglichkeit, womit man auch diese Eventualitäten berücksichtigen kann?!

Mit freundlichen Grüßen
pm
Bitte warten ..
Mitglied: Biber
20.04.2012 um 11:33 Uhr
Moin pmaterina,

willkommen im Forum.

Wenn du eine exakte Überstimmung überprüfen willst, so ist bei FindStr.exe der Parameter "/C:" dafür vorgesehen.
Oder auch der Paramter /X, mit dem du ganze Zeilen vergleichen kannst.

Beispiel am CMD-prompt:
d;\temp>Type Datei?.txt 
 
DateiA.txt 
 
00001 
002 
00003 
 
dateiB.txt 
 
00001 
00002 
00003 
 
d:\temp>findstr /v /x /g:Dateib.txt Dateia.txt 
002 
 
d:\temp>findstr /v /x /g:Dateia.txt Dateib.txt 
00002
Also ergänze einfach den Parameter /X in dem oben zitierten Oneliner.

Grüße
Biber
Bitte warten ..
Mitglied: pmaterina
20.04.2012 um 11:44 Uhr
Hi Biber,

hätte ich mal findstr/? genauer gelesen.... @^-^@

alleine mit dem Parameter /C funktioniert es so nicht,
da 002 in 2.txt gefunden wird, genauer in 00002 gefunden wird

aber in kombination mit /x und /c läuft´s einwandfrei (als .bat ausgeführt):

for /f "delims=" %%a in (1.txt) do @findstr /i /X /C:"%%a" 2.txt || @echo %%a>>3.txt

3.txt:
002

Vielen Dank für die schnelle Hilfe!

Mit freundlichen Grüßen
pm
Bitte warten ..
Mitglied: 106009
20.04.2012 um 13:55 Uhr
Hi,

zeilenweises Vergleichen kann mit dem Konsolentool comp, binären Vergleich mit fc durchühren.

Gruß
Bitte warten ..
Mitglied: Letzify
17.02.2015 um 10:18 Uhr
Hallo Biber,

eine ähnliche Lösung habe ich für meine Zwecke auch gefunden - allerdings habe ich bei deiner - wie auch bei meiner Lösung - das Problem, dass mir die Datei, die hinterher entsteht auch die Zeilen "Verzeichnis von" ausgibt, obwohl sich diese Zeile im Vergleich zur Quelldatei gar nicht geändert haben.

Die Verzeichnislisten, die ich damit überprüfe haben 20.000 Verzeichnisse und 26.000 Dateien. Ich hatte jetzt zwei Ideen, wie ich es trotzdem noch hinbekomme diesen Umstand zu nutzen, allerdings keinen Ansatz, wie ich das hinbekommen soll. Jegliche Versuche scheiterten.

1) die Zeile "Verzeichnis von" in einer Variablen puffern und zusammen mit der geänderten Datei hinterher in eine Zeile schreiben (allerdings nur die Datei, nicht das Änderungsdatum, die Uhrzeit, die Art und Größe etc, also im Prinzip nur Spalte 5).

Beispiel alt:
Verzeichnis von \\Server\Verzeichnis\U-Verzeichnis\...
17.02.2015 09:34 4.252.754 datei.txt

Beispiel neu:
\\Server\Verzeichnis\U-Verzeichnis\...\datei.txt

2) Alle Zeilen aus der Zieldatei löschen zu lassen, wo nach einer "Verzeichnis von"-Zeile eine weitere folgt, also folglich keine Änderung in diesem Verzeichnis erfolgt ist.

Beispiel alt:
Verzeichnis von \\Server\Verzeichnis\U-Verzeichnis
Verzeichnis von \\Server\Verzeichnis\U-Verzeichnis\UU-Verzeichnis\
Verzeichnis von \\Server\Verzeichnis\U-Verzeichnis\UU-Verzeichnis\UUU-Verzeichnis

Beispiel neu:
(die beiden ersten Zeilen wurden gelöscht, da nachfolgend keine Änderungen vorgenommen wurden)
Verzeichnis von \\Server\Verzeichnis\U-Verzeichnis\UU-Verzeichnis\UUU-Verzeichnis

Bei beiden sitze ich nun schon seit 3-4 Tagen dran und bekomme es mit den Bordmitteln einfach nicht hin.

Ich hoffe du kannst mir weiterhelfen, da ich langsam wahnsinnig werde ;)
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
gelöst Textdateien vergleichen BATCH (2)

Frage von FeudelFred zum Thema Batch & Shell ...

Batch & Shell
gelöst 2 große TXT Dateien vergleichen und Unterschiede in andere Datei schreiben (6)

Frage von sid.pdm zum Thema Batch & Shell ...

Windows Server
AD-Berechtigungen von zwei Servern miteinander vergleichen (3)

Frage von s0m3ting zum Thema Windows Server ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (32)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...