ivowie97
Goto Top

txt Listen Auswerten per Batch-Datei

Hallo Zusammen

Ich habe zwei .txt Listen mit Werten drin, die ich mit einer Batch-Datei auswerten möchte.
In der Liste 1 sind folgende Werte gespeichert:

CH0001
CH0002
CH0004
CH0005
CH0006
CH0009
CH0010
CH0012

Und in der Liste 2 diese Werte:

CH0001
CH0003
CH0004
CH0005
CH0007
CH0009
CH0010
CH0011
CH0012

Nun möchte ich in einer 3. Liste Alle Werte ausgeben, die in der Liste 1 sind, aber nicht in der Liste 2.

Also folgendes:

CH0002
CH0006

Wie schon gesagt möchte ich dies mit einer Batch-Datei lösen. Ist dies überhaupt möglich? (Ich bin noch ziemlich unerfahren mit Batch-Dateien)
Oder gibt es eine einfachere Lösung als mit einer Batch-Datei? Das ganze sollte später in einem automatisierten Ablauf gemacht werden, also ist Excel keine Lösung ;)

Vielen Dank für eure Hilfe face-smile

Content-ID: 286118

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

Ausgedruckt am: 22.11.2024 um 11:11 Uhr

Budders
Lösung Budders 20.10.2015, aktualisiert am 23.10.2015 um 15:35:17 Uhr
Goto Top
Guten Morgen

Ich benutze dafür immer diesen Batch den ich mir vor Urzeiten mal geschrieben habe face-smile

@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%a in (datei1.txt) do (  
  set found=n
  for /f "delims=" %%b in (datei2.txt) do (  
    if "%%a"=="%%b" set found=j  
  )
  if !found!==n echo %%a>>output.txt
)


MfG
Budders
Ivowie97
Ivowie97 20.10.2015 um 11:06:08 Uhr
Goto Top
Vielen Dank für deine schnelle Antwort!

Aber irgendwie bringe ich diesen Code nicht zu laufen.
Ich verstehe Ihn auch nicht wirklich face-sad

Freundliche Grüsse

Ivowie97
Budders
Budders 20.10.2015 um 11:28:57 Uhr
Goto Top
Kein Problem, dann versuche ich ihn dir mal zu erklären ^^
Zeile 1 und 2 sollten klar sein hoffe ich.
Zeile 3 durchläuft nacheinander jede Zeile der datei1.txt (hier musst du "datei1.txt" durch den Dateinamen deiner ersten Listendatei ersetzen.)
Zeile 4 setzt für jede Zeile in der datei1.txt eine Variable auf n
Zeile 5 durchläuft anschließend alle Zeilen der datei2.txt (hier auch "datei2.txt" durch den Dateinamen deiner zweiten Listendatei ersetzen.)
Zeile 6 prüft ob die Zeile aus datei1.txt in datei2.txt gefunden wurde (einfache if-Abfrage.) wenn ja: setzt er die in Zeile 4 definierte Variable auf j
Zeile 8 schaut dann auf die Variable aus Zeile 4 und 6 und schreibt die nicht in datei2.txt gefundene Zeile in eine output.txt

Um das zum Laufen zu bekommen müsstest du nur "datei1.txt" und "datei2.txt" anpassen.
Als .bat oder .cmd in dem Verzeichnis speichern wo auch beide Dateien liegen (oder die Pfade komplett deklarieren), ausführen und in die output.txt schauen, welche der Zeilen aus deiner ersten Liste nicht in der Zweiten auftauchen face-smile

Hoffe ich konnte dir helfen.

MfG
Budders
Ivowie97
Ivowie97 20.10.2015 um 13:50:49 Uhr
Goto Top
Vielen Dank für die Ausführliche Beschreibung, jetzt verstehe ich den Code face-smile

Ich habe natürlich alle Dateinamen ersetzt, jedoch schreibt es am Schluss die output.txt nicht.
Wenn ich die Datei starte, öffnet sie sich, und am Ende ist trotzdem keine output.txt vorhanden.

Ich habe es auch schon versucht mit den ganzen Pfaden, dies Funktioniert ebenfalls nicht.

Freundliche Grüsse

Ivowie97
Budders
Budders 20.10.2015 um 15:49:16 Uhr
Goto Top
Das ist merkwürdig.
Bei mir funktioniert genau der exakte Code reibungslos.

Magst du ein mal eine Eingabeaufforderung da starten, wo das Skript liegt und diese mit call aufrufen? Vorher das @echo off entfernen. Und schauen ob/wo es abbricht und ggf. das Ergebnis posten. Würde mich sehr interessieren was da nicht hin haut.

Und noch als Hinweis, dem Skript ist es egal in welcher Reihenfolge die Datensätze in der Datei stehen. Es kontrolliert nur ob in beiden Dateien die gleichen Sätze stehen, die Position ist egal.

Schönen Feierabend
-Budders
Ivowie97
Ivowie97 20.10.2015 um 16:31:17 Uhr
Goto Top
Ich habe das Script jetzt einmal ohne den genauen Pfad und einmal mit dem genauen Pfad mit Call aufgerufen.

Ohne genauem Pfad:

cc24f83b22a261766f8732eed685a845

Mit genauem Pfad:

8e68551cc08ddd6b5e6e1ce8a4f5e840

Vielen Dank für deine Geduld!

Freundliche Grüsse

Ivowie97
bastla
bastla 20.10.2015 um 19:56:03 Uhr
Goto Top
Hallo Ivowie97 und willkommen im Forum, hallo Budders!

Eigentlich sollte dafür doch etwas in der Art
findstr /vx:D:\Users\CH1011180\Desktop\Test\liste2.txt D:\Users\CH1011180\Desktop\Test\liste1.txt >D:\Users\CH1011180\Desktop\Test\output.txt
genügen ...

Grüße
bastla
Ivowie97
Ivowie97 23.10.2015 um 15:35:06 Uhr
Goto Top
Ich habe das ganze jetzt auf einer Virtuellen Maschine getestet.
Da funktionierte alles einwandfrei.
Anscheinend ist mit meinem PC etwas nicht in Ordnung, dass es die Output.txt nicht geschrieben hat.

Vielen Dank für deine eure Geduld!

Freundliche Grüsse

Ivowie97
chgs2011
chgs2011 16.10.2018 um 12:04:36 Uhr
Goto Top
Super Lösung, danke!

Ich möchte ebenfalls TXT-Files vergleichen, habe leider eine kleine zusätzliche Schwierigkeit.
Ich möchte Parameter prüfen, unabhängig vom gesetzten Wert.

Die Zeilen enthalten einen Wert, ein Leerzeichen oder Tab und wieder einen Wert.

Beispiel:
Liste 1
PARAM1 No
PARAM2 -
PARAM3 YES
PARAM4 YES
PARAM5 YES

Liste 2
PARAM1 No
PARAM2 -
PARAM5 YES

Möchte also wissen, welche PARAMETER nicht gesetzt wurden.

Danke