Dateien vergleichen per Batch
Ich bräuchte ein kleines Programm, das zwei Textdateien vergleicht und anschließend ein anderes – bereits vorhandenes – Programm genau dann startet, wenn die beiden Dateien voneinander verschieden sind. Geht so etwas womöglich schon mit einer Batch-Datei?
Ich bräuchte ein kleines Programm, das zwei Textdateien vergleicht und anschließend ein anderes – bereits vorhandenes – Programm genau dann startet, wenn die beiden Dateien voneinander verschieden sind. Geht so etwas womöglich schon mit einer Batch-Datei?
Ja, genau für solche Zwecke sind Batch-Dateien gedacht. Für den Dateivergleich nehmen Sie am besten das Programm fc: Es lässt sich über verschiedene Optionen, die Sie mit fc /? herausfinden, feinjustieren, aber für einen simplen Textvergleich genügt der nackte Aufruf nach dem Muster fc <i>Datei1 Datei2</i>.
Wie beinahe jeder Befehl der Eingabeaufforderung und jedes Kommandozeilenprogramm liefert fc eine Zahl zurück, die über Erfolg oder Misserfolg seiner Ausführung Auskunft gibt und die sich innerhalb der Batch-Datei auswerten lässt. 0 bedeutet immer einen fehlerfreien Lauf; wenn etwas schiefgegangen ist, erhält man eine – je nach Befehl unterschiedlich zu interpretierende – Zahl größer als 0. Im Falle von fc bedeutet eine 1, dass die Dateien unterschiedlich waren, und eine 2 einen Dateifehler, also dass etwa eine der Dateien nicht existierte.
In einer Batch-Datei lässt sich dieses Ergebnis auswerten, indem man unmittel-bar nach dem Befehl eine Zeile nach dem Muster
if errorlevel n Befehl
einfügt. Für n muss man eine Zahl einsetzen, und das if sorgt dafür, dass der Befehl genau dann ausgeführt wird, wenn das vorangegangene Kommando ein Ergebnis größer oder gleich dieser Zahl geliefert hat. Mit diesem Wissen ist Ihre Batch-Datei ein Dreizeiler:
@echo off
fc Text1.txt Text2.txt > nul
if errorlevel 1 C:\Programme\TuWas.exe
Das @echo off in der ersten und das > nul in der zweiten Zeile unterdrücken störende Textausgaben. Statt Datei- und Programmnamen fest vorzugeben, können Sie natürlich auch %1, %2 und %3 verwenden und die Argumente erst beim Aufruf festlegen. (hos)
(hos)