domann
Goto Top

Batch-Datei soll Dateien vergleichen und Unterschiedliche in Liste ausgeben

Hallo Gemeinde,

ich habe mehrere Ordner mit gleichen Dateien.
Ich brauche eine Batch-Datei, die mir die dateien vergleicht und
UNGLEICHE in eine Liste schreibt und diese unter z.B. Liste.txt
abspeichert, oder noch besser die die ungleichen Dateien in zwei
neue, separate Ordner speichert.
Schön wäre auch, wenn direkt die Unterschiede zwischen den
Dateien ausgegeben werden könnten (Tabellarisch??).

Die Dateien haben folgende Dateinamen:
T000001.50
T000001.51
T000002.50
T000002.51
T000002.53
usw...

und sehen wie folgt aus:
/*Tabelle : T000001.50
/*Version : 1
/*
/*Datum : 02.2d_27_10
/*
/*Änderung auf Version x am xx.xx.xx von xyz :
/*

Offset-Tabelle zum Macro Riegel klinken : M001001
Serie : Fassade FW50/SK60V/FW50+/FW60+
Anzahl Eintraege:4
N1 : 7: Schlichtschritt Unten
N2 : 60: Materialst„rke Unten
N3 : 30: Materialst„rke Seitlich
N4 : 100: Vorschub in Prozent

wäre schön, wenn mir da jemand helfen könnte.
hab nur sehr wenig Erfahrung mit BAT-Dateien.

Grüße
Dominic

Content-Key: 62684

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

Ausgedruckt am: 28.03.2024 um 18:03 Uhr

Mitglied: bastla
bastla 29.06.2007 um 17:12:36 Uhr
Goto Top
Hallo DoMann und willkommen im Forum!

ich habe mehrere Ordner mit gleichen Dateien.
Miteinander vergleichen wirst Du aber immer nur jeweils 2 Ordner können. Meinst Du übrigens mit "gleich", dass sie gleiche Dateinamen haben?

Schön wäre auch, wenn direkt die Unterschiede zwischen den Dateien ausgegeben werden könnten (Tabellarisch??).
Wie "ungleich" können die Dateien werden, oder anders formuliert: Bleibt die Struktur des Inhalts gleich, sodass ein zeilenweiser Vergleich sinnvoll ist, oder können in einer Datei auch mehr oder weniger Zeilen enthalten sein (wobei aber zumindest die Reihenfolge der Zeilen gleich ist)?

Die einfachste Form eines Vergleichs erhältst Du übrigens mit "fc Datei1 Datei2" von der Kommandozeile (wird auch im folgenden Entwurf eingesetzt). Ist zwar nicht besonders übersichtlich, kommt aber auch mit unterschiedlicher Zeilenanzahl ganz gut zurecht ...

Als Batch könnte ein Entwurf (zum Vergleichen gleichnamiger Dateien) so aussehen:
@echo off & setlocal
set "Verzeichnis1=D:\Testdaten"  
set "Verzeichnis2=D:\Vergleichsdaten"  
set "Fehler=D:\Fehler.txt"  
set "Diff=D:\Differenzen.txt"  
set "Diff1=D:\Diff1"  
set "Diff2=D:\Diff2"  
if exist "%Fehler%" del "%Fehler%"  
if exist "%Diff%" del "%Diff%"  
if not exist "%Diff1%" md "%Diff1%"  
if not exist "%Diff2%" md "%Diff2%"  
for %%i in ("%Verzeichnis1%\*.*") do call :ProcessFile "%%i"  
if exist "%Fehler%" cls & type "%Fehler%" & pause  
if exist "%Diff%" notepad "%Diff%"  
goto :eof
:ProcessFile
if not exist "%Verzeichnis2%\%~nx1" (echo Nicht vorhanden: %Verzeichnis2%\%~nx1>>"%Fehler%") & goto :eof  
fc "%~f1" "%Verzeichnis2%\%~nx1">nul && goto :eof  
echo Unterschiedlich: %Verzeichnis2%\%~nx1>>"%Fehler%"  
copy /y %1 "%Diff1%">nul  
copy /y "%Verzeichnis2%\%~nx1" "%Diff2%">nul  
echo ##############################################################################>>"%Diff%" 
fc /n "%~f1" "%Verzeichnis2%\%~nx1">>"%Diff%"  
echo ##############################################################################>>"%Diff%" 
echo.>>"%Diff%"  
echo.>>"%Diff%"  
Die beiden Verzeichnisse habe ich zum Testen direkt in den Code geschrieben, später können sie als Startparameter beim Aufruf mitgegeben werden. Die Pfade, auch der Protokolldateien, musst Du natürlich in den "set"-Zeilen anpassen.

[Zusätzlich zur Ausgabe der Fehlermeldung/Differenzen bei Ungleichheit in Protokolldateien lassen sich natürlich die Dateien auch verschieben, allerdings müsstest Du dazu etwas konkretere Angaben machen und Dir insbesondere eine Strategie für den Fall, dass eine gleichnamige Datei bereits im Zielverzeichnis vorhanden ist, überlegen (vorhandene Datei überschreiben, umbenennen, ...)] - bereits umgesetzt

Grüße
bastla

[Edit] Kopieren unterschiedlicher Dateien im Batch integriert. [/Edit]
Mitglied: DoMann
DoMann 30.06.2007 um 06:44:03 Uhr
Goto Top
Hallo Bastla,

wenn immer nur zwei Dateien miteinander verglichen werden können ist das absolut in Ordnung.
Grundsätzlich sehen die Dateien gleich aus, können sich hauptsächlich in den
Parameterwerten unterscheiden, oder (gelegentlich nach Updates) auch in der Zeilenzahl.
Dabei bleibt die Struktur jedoch gleich.
Ich werde so schnell wie möglich mal sich unterscheidende Dateien gleichen Namens hier posten.

Verglichen werden soll immer z.B.
T000001.50 aus Ordner 1 mit T000001.50 aus Ordner 2.
T000001.51 aus Ordner 1 mit T000001.51 aus Ordner 2.
T000002.50 aus Ordner 1 mit T000001.50 aus Ordner 2.
usw...

In den Ordnern, wo die sich unterscheidenden Dateien hineinkopiert werden sollen,
befinden sich natürlich KEINE Dateien, d.h. es müssen, wenn ein inhaltlicher Unterschied
zwischen zwei Dateien besteht
T000001.51 aus Ordner 1 in Ordner Diff1 kopiert werden und
T000001.51 aus Ordner 2 in Ordner Diff2 Kopiert werden.

Gruß Dominic
Mitglied: bastla
bastla 30.06.2007 um 09:53:18 Uhr
Goto Top
Hallo DoMann!

Ich habe das Kopieren gleich oben im Code ergänzt.

Grüße
bastla
Mitglied: DoMann
DoMann 02.07.2007 um 10:51:47 Uhr
Goto Top
Hallo Bastla,

hab die Datei heute ausprobiert,
jedoch schreibt der die ganze Zeit

Der Befehl fc ist entweder falsch geschrieben oder konnte nicht gefunden werden

woran kann das liegen???

Grüße DoMann
Mitglied: Biber
Biber 02.07.2007 um 12:48:02 Uhr
Goto Top
Moin DoMann,

Der Befehl fc ist entweder falsch geschrieben oder konnte nicht gefunden werden
woran kann das liegen???
Hmmm... schwierige Frage...*g

Sagen wir so - dass Du die zwei Buchstaben "fc" falsch schreibst - das möchte und werde ich Dir nicht öffentlich unterstellen.

Also wird der zweite Teil der möglichen Ursachenbeschreibung zutreffen.: Fc.exe kann nicht gefunden werden.

Das ist zwar ungewöhnlich, aber nicht ausgeschlossen.

Bitte führe mal vom CMD-Prompt drei Befehle durch
ver
dir %windir%\fc.* /b /s
path
...und poste bitte das Ergebnis.

Danke
Biber
Mitglied: DoMann
DoMann 02.07.2007 um 13:08:12 Uhr
Goto Top
Hallo Biber,

habe die angegebenen Befehle ausgeführt und folgende Ergebnisse erhalten:

C:\>ver

Microsoft Windows XP [Version 5.1.2600]

C:\>dir %windir%\fc.* /b /s
C:\WINDOWS\I386\FC.EX_
C:\WINDOWS\system32\fc.exe
C:\WINDOWS\system32\dllcache\fc.exe

C:\>path
PATH=%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\Programme\
SCHUECO_CAM\List&Label;

ich hoffe, Du kannst damit was anfangen...

Grüße
DoMann
Mitglied: Biber
Biber 02.07.2007 um 16:49:20 Uhr
Goto Top
Moin DoMann,

danke für die Rückmeldung.
Die Ausgaben:
a) ver - ist ok
b) ist auch wie erwartet- fc.exe ist dort, wo es zu erwarten war
...ergo muss der Suchpfad %PATH% marode sein...

Auffällig am angezeigten %PATH% bei Dir ist, dass eigentlich die Variable %SystemRoot% hätte aufgelöst sein müssen (d.h. dort sollte "c:\windows\system32" stehen und nicht "%SystemRoot%\system32" etc.).
[Außerdem fehlt ein Backslash bei "C:\Programme--hier:\--->SCHUECO_CAM\List&Label;" ...aber der hat nix mit dem fc.exe zu tun]

Da hat irgendein stümperhaft geschriebenes Inst-Prog (evtl aus dem Hause M$??) in der Registry Variablenwerte vom Typ REG_EXPAND_SZ als REG_SZ angelegt... egal.

Reparaturmöglichkeit:
Rufe "Start"->"Systemsteuerung"->"System" auf, dann "Erweitert"->"Umgebungsvariablen"

Bearbeite die Variablen PATH unter System und falls vorhanden unter Benutzer.
Ersetze alle Strings %SystemRoot% durch c:\Windows.

Und neuer Versuch.

Gruß
Biber
Mitglied: DoMann
DoMann 03.07.2007 um 07:54:17 Uhr
Goto Top
Supi !!!!!

Hat funktioniert. Klappt alles so, wie´s soll.
Ich weiß zwar nicht, wer da Mist gebaut hat ( "Path")
aber die Batch funktioniert.

Hätte da zwar ncoh andere Ideen, da ich eigendlich drei
Ordner habe, die ich untereinander vergleichen muss
(evtl. ne if then kombination???), muss aber nicht,
nur wenn Ihr wollt... ;-D

Als denn, vielen Dank bis hierhin

DoMann
Mitglied: Biber
Biber 03.07.2007 um 13:30:50 Uhr
Goto Top
Moin DoMann,

gern geschehen bis hierhin.... und bei Bedarf auch gerne weiter.

Dennoch hätte ich, wenn Du da jetzt mit diesem etwas spezielleren 3-Ordner-Problem erstmal am Basteln bist, die Bitte, dass wir diese Frage hier auf "gelöst"/"geschlossen" setzen.

Danach hättest Du dann die Optionen, dass Du
  • bei Problemen schon ein konkretes Skriptchen für einen neuen Beitrag vorliegen hast, an dem wir gemeinsam weiterbasteln können
  • oder aber Du beißt Dich da alleine durch und kannst dann erschöpt, aber glücklich Dein erstes Tutorial/Deine erste Musterlösung hier posten kannst ;.)


Grüße
Biber