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

Batch-Datei soll Dateien vergleichen und Unterschiedliche in Liste ausgeben

Frage Entwicklung Batch & Shell

Mitglied: DoMann

DoMann (Level 1) - Jetzt verbinden

29.06.2007, aktualisiert 03.07.2007, 10022 Aufrufe, 9 Kommentare

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
Mitglied: bastla
29.06.2007 um 17:12 Uhr
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:
01.
@echo off & setlocal 
02.
set "Verzeichnis1=D:\Testdaten" 
03.
set "Verzeichnis2=D:\Vergleichsdaten" 
04.
set "Fehler=D:\Fehler.txt" 
05.
set "Diff=D:\Differenzen.txt" 
06.
set "Diff1=D:\Diff1" 
07.
set "Diff2=D:\Diff2" 
08.
if exist "%Fehler%" del "%Fehler%" 
09.
if exist "%Diff%" del "%Diff%" 
10.
if not exist "%Diff1%" md "%Diff1%" 
11.
if not exist "%Diff2%" md "%Diff2%" 
12.
for %%i in ("%Verzeichnis1%\*.*") do call :ProcessFile "%%i" 
13.
if exist "%Fehler%" cls & type "%Fehler%" & pause 
14.
if exist "%Diff%" notepad "%Diff%" 
15.
goto :eof 
16.
:ProcessFile 
17.
if not exist "%Verzeichnis2%\%~nx1" (echo Nicht vorhanden: %Verzeichnis2%\%~nx1>>"%Fehler%") & goto :eof 
18.
fc "%~f1" "%Verzeichnis2%\%~nx1">nul && goto :eof 
19.
echo Unterschiedlich: %Verzeichnis2%\%~nx1>>"%Fehler%" 
20.
copy /y %1 "%Diff1%">nul 
21.
copy /y "%Verzeichnis2%\%~nx1" "%Diff2%">nul 
22.
echo ##############################################################################>>"%Diff%" 
23.
fc /n "%~f1" "%Verzeichnis2%\%~nx1">>"%Diff%" 
24.
echo ##############################################################################>>"%Diff%" 
25.
echo.>>"%Diff%" 
26.
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]
Bitte warten ..
Mitglied: DoMann
30.06.2007 um 06:44 Uhr
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
Bitte warten ..
Mitglied: bastla
30.06.2007 um 09:53 Uhr
Hallo DoMann!

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

Grüße
bastla
Bitte warten ..
Mitglied: DoMann
02.07.2007 um 10:51 Uhr
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
Bitte warten ..
Mitglied: Biber
02.07.2007 um 12:48 Uhr
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
Bitte warten ..
Mitglied: DoMann
02.07.2007 um 13:08 Uhr
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
Bitte warten ..
Mitglied: Biber
02.07.2007 um 16:49 Uhr
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
Bitte warten ..
Mitglied: DoMann
03.07.2007 um 07:54 Uhr
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
Bitte warten ..
Mitglied: Biber
03.07.2007 um 13:30 Uhr
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
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...

Windows Tools
gelöst Aussendienst Datensynchronisierung (12)

Frage von lighningcrow zum Thema Windows Tools ...

Windows Server
Suche passender Treiber (12)

Frage von stolli zum Thema Windows Server ...