FCOMP vergleicht die Textausgabe eines Programms mit dem Inhalt einer Datei. Der Parameter des Filters ist also nicht wie bei PCOMP- und PCOMPCR.DEB der direkt zu vergleichende Text, sondern eine Datei, die den Vergleichstext enthält. Der Vorteil gegenüber den anderen Vergleichsfiltern liegt in der höheren Flexibilität. Wenn Sie z. B. die überdurchschnittlich lange Textausgabe eines Programmes in eine Datei umleiten und mit der ebenfalls lange Ausgabe des nächsten Programms vergleichen wollen, verwenden Sie FCOMP:
@ECHO OFF CD >\TMP\AKTUELL.DIR ECHO Sie lassen jetzt eine beliebige andere ECHO Anwendung arbeiten, die unter anderem ECHO z. B. in ein sehr tiefes Unterverzeichnis ECHO wechselt, oder auch nicht... CD | FCOMP \TMP\AKTUELL.DIR IF ERRORLEVEL 255 GOTO FEHLER IF ERRORLEVEL 1 GOTO UNGLEICH ECHO Das aktuelle Verzeichnis ECHO ist gleichgeblieben... GOTO ENDE :UNGLEICH ECHO Das aktuelle Verzeichnis ECHO hat sich geändert... GOTO ENDE :FEHLER ECHO Die Datei \TMP\AKTUELL.DIR ECHO existiert nicht (mehr)... :ENDE
Wie bei PCOMP(CR) können Sie bei FCOMP die Wildcard »?« verwenden. Seien Sie aber vorsichtig, wenn Sie die Vergleichsdatei editieren. Sehr leicht gelangt nämlich ein zusätzliches Zeichen, und sei es nur das Dateiendezeichen [Strg]-Z oder ein zusätzlicher Zeilenvorschub am Ende, in die Datei, und der gesamte Vergleich endet mit einem Fehler. Verwenden Sie daher am besten den Debugger, um ein oder mehrere Zeichen durch die Wildcard zu ersetzen. Wollen Sie z.B. überprüfen, ob Sie sich gerade im Hauptinhaltsverzeichnis eines beliebigen Laufwerks befinden, gehen Sie folgendermaßen vor, um die benötigte Vergleichsdatei mit dem Inhalt »?:\« zu erhalten:
CD \ CD >C:\ROOT.DIR DEBUG C:\ROOT.DIR E 100 "?" W Q
Die zugehörige Stapeldatei sieht dann folgendermaßen aus:
CD | FCOMP C:\ROOT.DIR IF ERRORLEVEL 1 GOTO FEHLER ECHO Sie sind im Hauptinhaltsverzeichnis GOTO ENDE :FEHLER ECHO Sie sind nicht im Hauptinhaltsverzeichnis! :ENDE
Natürlich könnten Sie diese Anwendung viel leichter mit »PCOMPCR ?:\« realisieren – uns ging es hierbei nur ums Prinzip.
Name: | FCOMP.DEB |
Funktion: | Vergleicht empfangene Zeichen mit dem Inhalt einer Datei. |
Übersetzung: | DEBUG <FCOMP.DEB |
Prüfsumme: | E298 |
Anwendung: | FCOMP Datei1 <Datei2IF ERRORLEVEL # (? als Wildcard in Datei1 erlaubt) # = 255: Datei1 existiert nicht # = 1: Inhalt von Datei1 ist nicht mit Datei2 identisch # = 0: Inhalt von Datei1 ist mit Datei2 identisch |
Einschränkungen: | Für jedes Fragezeichen als Wildcard muß genau ein Zeichen kommen. |
A MOV BX,[80] ;100 MOV By[BX+E081],0 ;104 MOV DX,82 ;109 MOV AX,3D00 ;10C CALL 139 ;10F MOV BX,AX ;112 MOV CX,1 ;114 MOV DX,FF ;117 MOV AH,3F ;11A CALL 139 ;11C AND AX,AX ;11F JZ 142 ;121 MOV AH,6 ;123 INT 21 ;125 JZ 136 ;127 CMP AL,[FF] ;129 JZ 114 ;12D CMP By[FF],3F ;12F JZ 114 ;134 MOV AX,4C01 ;136 INT 21 ;139 JNB 142 ;13B MOV AX,4CFF ;13D INT 21 ;140 RET ;142 RCX 43 NFCOMP.COM W Q
Quelle: 200 Utilities für PC-/MS-DOS von Gerhard Schild und Thomas Jannot