Contents of the QCMP.DOC file
QCMP compares two files, or two groups of files. It is not
designed to isolate file differences, but simply to tell you
whether or not files are identical. This can be used to verify
file-by-file backup operations, for smart batch files, in
Personal REXX programs, etc. QCMP is similar to DOS's COMP
command except that (1) it doesn't display differences; (2) the
display is better suited for automated processing; and (3) it
returns a usable errorlevel.
Version 1.13 adds SHARE support but makes no other changes.
| indicates changes in recent versions.
Here is the syntax for running QCMP:
qcmp filespec1 filespec2 [-Dn] [-H] [-T]
Usage is largely the same as DOS's COMP command except that
QCMP does not prompt for missing input, and the three option
switches are not found in COMP. The optional switches can be
introduced by either a hypen (-) or a slash (/).
Filespec1 can be any valid file or directory specification:
d: Drive only
path Path only
d:file.ext Drive, filename, extension
path\file.ext Path, filename, extension
d:path\file.ext Drive:path. filename, extension
If no drive is specified, the current drive is assumed. If no
path is specified, the current directory for the selected
drive is assumed.
If no filename is specified, "*.*" (all files) is assumed.
If no extension is specified, "*" is assumed. If you really
want to check a file that has no extension, use a single "."
with no extension. For example, "foo" is assumed to be "foo.*",
but "foo." matches only a file called "foo" (not "foo.txt").
Filespec2 is identical to filespec1 except that a missing
filename will default to the filename used in filespec1 rather
qcmp *.* b:
Compare all files in current directory of current drive
with files of the same name on drive B:
qcmp a: b:
Compare all files on drive A: to same files on drive B:.
qcmp \asm\*.asm b:*.bak
Compare all *.ASM files in \ASM directory of current
drive to files with same root name but .BAK extension on
The -D (Display level) switch affects the results messages that
are displayed. Valid display levels are:
-D0 No display; return errorlevel only.
-D1 Display results only for comparison errors
-D2 Display results for all files compared
The -D0 level is intended for batch files and Personal REXX
programs (or other programs that can execute QCMP and examine
the result code). The -D2 level is the default.
Checking the timestamp
If two files have identical contents, QCMP will normally
consider them to be the same even if their dates or times
differ. However, if you use the -T switch, QCMP will also
compare the files' modification dates and times; if they are
different, the files are reported as being different, even if
their contents are the same.
Including hidden files
If you want to include hidden files such as IBMBIO.COM in your
comparisons, add the -H switch. For example,
qcmp -h c:\*.* b:
would compare all of the files in the root directory of drive C
with copies on drive B, including hidden files (possibly,
IBMBIO.COM and IBMSYS.COM). Without the -H, hidden files would
not be included.
For each matching file, QCMP will display the following line:
filespec1 - filespec2 > result
where FILESPEC1 and FILESPEC2 are the two files currently being
compared, and RESULT is the comparison result. RESULT is one of
OK Files are identical
ERROR Files are same size but not identical
SIZE DIFF Files are different sizes
READ ERROR Error reading one of the files.
DATE/TIME DIFF Files' timestamps are different (this
error reported only if -T selected)
NOT FOUND Named file not found
Note that the -D1 display level suppresses the display of files
for which the result is "OK".
QCMP returns an errorlevel to DOS that describes the comparison
results. Errorlevel are as follows:
0 All files are identical (all "OK")
1 At least one comparison failed
254 No files found matching first filespec
255 Usage error, disk error, or insufficient memory
Note that if you specify the -d0 display level, ONLY the error
level is returned; there is no display at all. When -d0 is
specified, QCMP will terminate as soon as an errorlevel is
determined; for example, it will not bother to continue
comparing more files after one comparison fails, because the
errorlevel must be 1 regardless of the results of subsequent
Sample use: batch files
1. Branch to BACKUP if any *.ASM file in current drive is not
preperly backed up to B:*.BAK, else continue.
qcmp -d0 *.asm b:*.bak
If errorlevel 255 goto QCERR
If errorlevel 254 goto NOFILES
If errorlevel 1 goto BACKUP
... (all files OK)
... (needs backup)
... (no files match filespec1)
... (error in qcmp, or no matching files)
2. Back up any file in current directory that needs backup to
drive B. This requires two batch files, one called by the other
using the technique of executing another copy of COMMAND.COM
with the second batch file as a parameter.
FOR %%a IN (*.*) DO command /c xxbak %%a
qcmp -d0 %1 b:
IF NOT errorlevel 1 GOTO OK
echo Backing up %1
copy %1 b:
echo %1 is backed up
Sample use: Personal REXX
1. Determine whether all files in current directory were
backed up successfully to drive b:
'qcmp -d0 *.* b:'
If rc = 0 Then
Say 'All files backed up OK'
Else If rc = 1 Then
Say 'Error in backup!'
Else If rc = 254 Then
Say 'No Matching files'
Else If rc = 255 Then
Say 'qcmp error!'
2. Create a list of files that need to be backed up from the
current directory of drive C to drive B, and back them all up.
The sample code assumes that STACKDRV and STACKMGR are
installed; without the STK device, the same could be accomplised
by redirecting output to a temporary file, reading the file line
by line, and then deleting the file.
'qcmp c: b: > stk'
If rc > 1 Then Do
Say 'Error invoking qcmp'
count = 0
Do While lines('stk') > 0
parse value linein('stk') with f1 ' - ' . ' > ' err
If err <> 'OK' Then Do
count = count+1
file.count = f1
error.count = err
If count = 0 Then
Say 'All files backed up OK'
Else Do i = 1 To Count
Say 'Backing up' file.i '(result = ' error.i')'
'copy file.i b:'
NOTE: after the WHILE loop, COUNT contains the number of compare
errors; FILE. contains an array of files not properly backed up,
and ERROR. contains the error text associated with FILE.
Indices to FILE. and ERROR. are the integers from 1 to COUNT.
Version 1.14 - 01/23/91
File sharing support released
Version 1.13 - 09/11/89
Version 1.12 - 04/03/89
Added -H switch
Corrected improper parsing of ".." directory when ".."
evaluates to the root directory.
Version 1.11 - 07/23/88
Corrected case sensitivity of -T switch ("it's always
something" - R. Roseannadanna)
Version 1.10 - 07/06/88
Added -T switch.
Added default '*' extension
Protected from erroneous comparisons generated through use
of file pathing utilities or DOS's APPEND command.
Protected from disk read errors.
Allowed '/' as well as '-' for switch character and removed
position dependency of switches.
Version 1.00 - 11/11/86
First public release
This document and the program file QCMP.EXE ("the software") are
copyrighted by the author. The copyright owner hereby licenses
you to: use the software; make as many copies of the program and
documentation as you wish; give such copies to anyone; and
distribute the software and documentation via electronic means.
There is no charge for any of the above.
However, you are specifically prohibited from charging, or
requesting donations, for any such copies, however made; and
from distributing the software and/or documentation with
commercial products without prior permission. An exception is
granted to not-for-profit user's groups, which are authorized to
charge a small fee for materials, handling, postage, and general
overhead. NO FOR-PROFIT ORGANIZATION IS AUTHORIZED TO CHARGE
ANY AMOUNT FOR DISTRIBUTION OF COPIES OF THE SOFTWARE OR
DOCUMENTATION, OR TO INCLUDE COPIES OF THE SOFTWARE OR
DOCUMENTATION WITH SALES OF THEIR OWN PRODUCTS.
THIS INCLUDES A SPECIFIC PROHIBITION AGAINST FOR-PROFIT
ORGANIZATIONS DISTRIBUTING THE SOFTWARE, EITHER ALONE OR WITH
OTHER SOFTWARE, AND CHARGING A "HANDLING" OR "MATERIALS" FEE OR
ANY OTHER SUCH FEE FOR THE DISTRIBUTION. NO FOR-PROFIT
ORGANIZATION IS AUTHORIZED TO INCLUDE THE SOFTWARE ON ANY MEDIA
FOR WHICH MONEY IS CHARGED. PERIOD.
There is no restriction on the use of this software in
commercial or institutional environments.
No copy of the software may be distributed or given away without
this document; and this notice must not be removed.
There is no warranty of any kind, and the copyright owner is not
liable for damages of any kind. By using this free software,
you agree to this.
The software and documentation are
Copyright (C) 1986,1988,1989,1991 by
The Cove Software Group
Christopher J. Dunford
P.O. Box 1072
Columbia, Maryland 21044
CompuServe 76703,2002 [IBMNET]
Personal REXX is a trademark of the Mansfield Software Group.