mirror of
https://github.com/microsoft/MS-DOS.git
synced 2025-08-21 13:17:07 +00:00
MS-DOS v2.0 Release
This commit is contained in:
813
v2.0/bin/UTILITY.DOC
Normal file
813
v2.0/bin/UTILITY.DOC
Normal file
@@ -0,0 +1,813 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
MS-DOS 2.0
|
||||
|
||||
Utility Extensions
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
The following notation is used below:
|
||||
|
||||
[item] item is optional.
|
||||
item* item is repeated 0 or more times.
|
||||
item+ item is repeated 1 or more times.
|
||||
{item1 | item2}
|
||||
item1 is present or item 2 is present but
|
||||
not both.
|
||||
<object> indicates a syntactic variable.
|
||||
|
||||
|
||||
COMMAND invokation
|
||||
|
||||
COMMAND [[<drive>:]<path>] [<cttydev>] [-D] [-P] [-C <string>]
|
||||
|
||||
-P If present COMMAND will be permanent, otherwise
|
||||
this is a transient command.
|
||||
|
||||
-D If present COMMAND will not prompt for DATE and
|
||||
TIME when it comes up.
|
||||
|
||||
d: Specifies device where command will look for
|
||||
COMMAND.COM current default drive if absent.
|
||||
|
||||
<Path> Specifies a directory on device d: root
|
||||
directory if absent.
|
||||
|
||||
<cttydev> Name of the CTTY device. /DEV/CON if absent
|
||||
and command is permanent. The /DEV/ may be left
|
||||
off if AVAILDEV is TRUE (see sysinit doc).
|
||||
|
||||
-C <string> If present -C must be the last switch.
|
||||
This causes COMMAND to try to execute the string
|
||||
as if the user had typed it at the standard input.
|
||||
COMMAND executes this single command string and
|
||||
then exits. If the -P switch is present it is
|
||||
ignored (can't have a single command, permanent
|
||||
COMMAND). NOTE: ALL of the text on the command
|
||||
line after the -C is just passed on. It is not
|
||||
processed for more arguments, this is why -C must
|
||||
be last.
|
||||
|
||||
COMMAND extensions
|
||||
|
||||
IF <condition> <command>
|
||||
|
||||
where <condition> is one of the following:
|
||||
|
||||
ERRORLEVEL <number>
|
||||
true if and only if the previous program EXECed by
|
||||
COMMAND had an exit code of <number> or higher.
|
||||
|
||||
<string1> == <string2>
|
||||
true if and only if <string1> and <string2> are
|
||||
identical after parameter substitution. Strings
|
||||
may not have embedded delimiters.
|
||||
|
||||
EXIST <filename>
|
||||
true if and only if <filename> exists.
|
||||
|
||||
NOT <condition>
|
||||
true if and only if <condition> is false.
|
||||
|
||||
The IF statement allows conditional execution of commands.
|
||||
When the <condition> is true, then the <command> is
|
||||
executed otherwise, the <command> is skipped.
|
||||
|
||||
Examples:
|
||||
|
||||
IF not exist /tmp/foo ECHO Can't find file /tmp/foo
|
||||
|
||||
IF $1x == x ECHO Need at least one parameter
|
||||
|
||||
IF NOT ERRORLEVEL 3 LINK $1,,;
|
||||
|
||||
|
||||
FOR %%<c> IN <set> DO <command>
|
||||
|
||||
<c> can be any character but 0,1,2,3,..,9 (so there is no
|
||||
confusion with the %0 - %9 batch parameters).
|
||||
|
||||
<set> is ( <item>* )
|
||||
|
||||
The %%<c> variable is sequentially set to each member of
|
||||
<set> and then <command> is evaluated. If a member of
|
||||
<set> is an expression involving * and/or ?, then the
|
||||
variable is set to each matching pattern from disk. In
|
||||
this case only one such <item> may be in the set, any
|
||||
<item>s after the first are ignored.
|
||||
|
||||
Example:
|
||||
|
||||
FOR %%f IN ( *.ASM ) DO MASM %%f;
|
||||
|
||||
for %%f in (FOO BAR BLECH) do REM %%f to you
|
||||
|
||||
NOTE: The '%%' is needed so that after Batch parameter
|
||||
(%0 - %9) processing is done, there is one '%' left.
|
||||
If only '%f' were there, the batch parameter processor
|
||||
would see the '%' then look at 'f', decide that '%f'
|
||||
was an error (bad parameter reference) and throw out
|
||||
the '%f' so that FOR would never see it. If the FOR
|
||||
is NOT in a batch file, then only ONE '%' should be
|
||||
used.
|
||||
|
||||
|
||||
SHIFT
|
||||
|
||||
Currently, command files are limited to handling 10
|
||||
parameters: %0 through %9. To allow access to more than
|
||||
these, the command SHIFT will perform a 'pop' of the
|
||||
command line parameters:
|
||||
|
||||
if %0 = "foo"
|
||||
%1 = "bar"
|
||||
%2 = "blech"
|
||||
%3...%9 are empty
|
||||
|
||||
then a SHIFT will result in the following:
|
||||
|
||||
%0 = "bar"
|
||||
%1 = "blech"
|
||||
%2...%9 are empty
|
||||
|
||||
If there are more than 10 parameters given on a command
|
||||
line, then the those that appear after the 10th (%9) will
|
||||
be shifted one at a time into %9 by successive shifts.
|
||||
|
||||
:<label>
|
||||
|
||||
This is essentially a no-op. It defines a label in the
|
||||
batch file for a subsequent GOTO. It may also be used to
|
||||
put comment lines in batch files since all lines that
|
||||
start with ':' are ignored.
|
||||
|
||||
GOTO <label>
|
||||
|
||||
Causes commands to be taken from the batch file beginning
|
||||
with the line after the <label> definition. If no label
|
||||
has been defined, the current batch file will terminate.
|
||||
|
||||
Example:
|
||||
|
||||
:foo
|
||||
REM looping...
|
||||
GOTO foo
|
||||
|
||||
will produce a infinite sequence of messages:
|
||||
'REM looping...'
|
||||
|
||||
NOTE: Labels are case insensitive, :FOO == :foo == :Foo
|
||||
|
||||
|
||||
ECHO [{ON | OFF | <message>}]
|
||||
|
||||
Normally, commands in a BATCH file are echoed onto the
|
||||
standard output as they are seen by COMMAND. ECHO OFF
|
||||
turns off this feature. ECHO ON turns echoing back on.
|
||||
If ON or OFF is not specified and there is text following
|
||||
the command, that text (a message) is echoed to standard
|
||||
output. If there are no arguments at all, the current
|
||||
setting of echo (on or off) is echoed to the standard
|
||||
output in the form:
|
||||
|
||||
ECHO is xxx
|
||||
|
||||
Where xxx is "on" or "off".
|
||||
|
||||
Redirection of standard input/standard output.
|
||||
|
||||
Programs that read from the keyboard and write to the
|
||||
screen are said to be doing I/O to the standard input and
|
||||
standard output. Using any of the following will result
|
||||
in I/O to these standard devices:
|
||||
|
||||
Writing to default handles 1 / read from default
|
||||
handle 0.
|
||||
|
||||
Doing byte I/O using system calls 1, 2, 6-12.
|
||||
|
||||
These standard devices may be redirected to/from files by
|
||||
the following in command line arguments:
|
||||
|
||||
> <filename>
|
||||
causes <filename> to be created (or truncated to
|
||||
zero length) and then assigns standard output to
|
||||
that file. All output from the command will be
|
||||
placed in the file.
|
||||
|
||||
< <filename>
|
||||
causes standard input to be assigned to
|
||||
<filename>. All input to the command will come
|
||||
from this file. If end-of-file is reached, then
|
||||
system calls 1, 2, 6-12 will return ^Z , while
|
||||
reading from handle 0 will return zero characters.
|
||||
|
||||
>> <filename>
|
||||
causes <filename> to be opened (created if
|
||||
necessary) and positions the write pointer at the
|
||||
end of the file so that all output will be
|
||||
appended to the file.
|
||||
|
||||
Note that the above will not appear in the command line
|
||||
that the program being invoked sees.
|
||||
|
||||
Examples:
|
||||
|
||||
DIR *.ASM > FOO.LST
|
||||
Sends the output of the dir command to the file
|
||||
FOO.LST.
|
||||
|
||||
|
||||
FOR %0 IN (*.ASM) DO MASM %0; >>ERRS.LST
|
||||
Sends all error output from assembling every .ASM file
|
||||
into the file ERRS.LST.
|
||||
|
||||
Piping of standard I/O
|
||||
|
||||
It is often useful for the output of one program to be
|
||||
sent as input to another program. A typical case is a
|
||||
program that produces columnar output that must later be
|
||||
sorted.
|
||||
|
||||
The pipe feature allows this to occur naturally is the
|
||||
programs do all of their I/O to the standard devices.
|
||||
|
||||
For example, if we had a program SORT that read all of
|
||||
it's standard input, sorted it and then wrote it to the
|
||||
standard output, then we could get a sorted directory
|
||||
listing as follows:
|
||||
|
||||
DIR | SORT
|
||||
|
||||
The | would cause all standard output generated by the
|
||||
left-hand command to be sent to the standard input of the
|
||||
right-hand command.
|
||||
|
||||
If we wanted the sorted directory to be sent to a file, we
|
||||
type:
|
||||
|
||||
DIR | SORT >FILE
|
||||
|
||||
and away it goes.
|
||||
|
||||
The piping feature is implemented as sequential execution
|
||||
of the procedures with redirection to and from temporary
|
||||
files. In the example above, the following would be an
|
||||
exact equivalent:
|
||||
|
||||
DIR >/tmp/std1
|
||||
SORT </tmp/std1 >FILE
|
||||
|
||||
|
||||
|
||||
The pipe is not a real pipe but rather a quasi-pipe
|
||||
that uses temporary files to hold the input and output as
|
||||
it sequentially executes the elements of the pipe. These
|
||||
files are created in the current directory, of the current
|
||||
drive and have the form %PIPEx%.$$$, where x will be 1 or
|
||||
2. This means that any program that runs in the pipe must
|
||||
be sure to restore the current directory and drive if it
|
||||
has changed them, otherwise the pipe files will be lost.
|
||||
|
||||
|
||||
VER
|
||||
Prints DOS version number.
|
||||
|
||||
VOL [<drive>:]
|
||||
Prints the volume ID of the disk in drive d:. No d: does
|
||||
default drive.
|
||||
|
||||
CHDIR [{<drive>: | <path>}]
|
||||
Change directory, or print current. directory.If no
|
||||
argument is given, the current directory on the default
|
||||
drive is printed. If d: alone is given, the durrent
|
||||
directory of drive d is printed. Otherwise the current
|
||||
directory is set to path.
|
||||
|
||||
NOTE:"CD" is accepted as an abbreviation.
|
||||
|
||||
MKDIR <path> - Make a directory.
|
||||
"MD" is accepted as an abbreviation.
|
||||
|
||||
RMDIR <path> - Remove a directory.
|
||||
"RD" is accepted as an abbreviation.
|
||||
The directory must be empty except for
|
||||
'.' and '..'.
|
||||
|
||||
<path> - A standard XENIX style path with the optional
|
||||
addition of a drive spec:
|
||||
|
||||
A:/FOO/BAR Full path
|
||||
/FOO/BAR Full path, current drive
|
||||
FOO/BAR Current dir relative
|
||||
A:FOO/BAR " " "
|
||||
|
||||
VERIFY [{ON | OFF}]
|
||||
Select/deselect verify after write mode. This supliments
|
||||
the V switch to the COPY command. Once turned ON, it
|
||||
stays on until some program changes it (via the set verify
|
||||
system call) or the VERIFY OFF command is given. If no
|
||||
argument is given, the current setting of VERIFY is
|
||||
printed to the standard output in the form:
|
||||
|
||||
VERIFY is xxx
|
||||
|
||||
Where xxx is "on" or "off".
|
||||
|
||||
PATH [<path>{;<path>}*]
|
||||
Set command search paths. This allows users to set
|
||||
directories that should be searched for external commands
|
||||
after a search of the current directory is made. The
|
||||
default value is /bin. In addition there are two special
|
||||
cases: PATH all by itself with no arguments will print
|
||||
the current path. Path with the single argument ';' (ie.
|
||||
"PATH ;") will set the NUL path (no directories other than
|
||||
the current one searched). If no argument is given, the
|
||||
current value of PATH is printed to the standard output in
|
||||
the form:
|
||||
|
||||
PATH=text of path
|
||||
or
|
||||
No path
|
||||
|
||||
NOTE: On IBM systems, the default value of path is No
|
||||
path.
|
||||
|
||||
EXIT
|
||||
For COMMANDs run without the P switch, this causes COMMAND
|
||||
to return. For a normal COMMAND it causes a return to
|
||||
itself.
|
||||
|
||||
BREAK [{ON | OFF}]
|
||||
Like in CONFIG.SYS, "BREAK ON" turns on the Control C
|
||||
check in the DOS function dispatcher. "BREAK OFF" turns
|
||||
it off. If no argument is given the setting of BREAK is
|
||||
printed to the standard output in the form:
|
||||
|
||||
BREAK is xxx
|
||||
|
||||
Where xxx is "on" or "off".
|
||||
|
||||
PROMPT [<prompt-text>]
|
||||
Set the system prompt. MS-DOS prompts are now user
|
||||
settable, all of the text on the command line is taken to
|
||||
be the new prompt. If no text is present the prompt is
|
||||
set to the default prompt. There are meta strings for
|
||||
various special prompts. These are of the form '$c' where
|
||||
c is one of the following:
|
||||
|
||||
$ - The '$' character.
|
||||
t - The time.
|
||||
d - The date.
|
||||
p - The current directory of the default drive.
|
||||
v - The version number.
|
||||
n - The default drive.
|
||||
g - The '>' character.
|
||||
l - The '<' character.
|
||||
b - The '|' character.
|
||||
s - The ' ' character.
|
||||
e - The ESC character.
|
||||
_ - A CR LF sequence.
|
||||
|
||||
EXAMPLE:
|
||||
PROMPT $n:
|
||||
Would set the normal MS-DOS prompt.
|
||||
PROMPT $n>
|
||||
Would det the normal PC-DOS prompt.
|
||||
PROMPT Time = $t$_Date = $d
|
||||
Would set a two line prompt which printed
|
||||
Time = (current time)
|
||||
Date = (current date)
|
||||
|
||||
NOTE: For '$c' sequences, lower case = upper case, and
|
||||
any character not on the above list is mapped to
|
||||
nothing.
|
||||
|
||||
SET (ENVNAME)=(ENVTEXT)
|
||||
Set environment strings. This command inserts strings in
|
||||
COMMAND's environment. For instance:
|
||||
|
||||
SET PROMPT=$n>
|
||||
Duplicates the function of the PROMPT command.
|
||||
SET PATH=p1;p2
|
||||
Duplicates the function of the PATH command.
|
||||
SET foo=bar
|
||||
Puts the string FOO=bar into the environment (note the
|
||||
case mapping of (ENVNAME)).
|
||||
|
||||
NOTE: Environments are very flexible, almost anything can
|
||||
be put into the environment with the SET command; the
|
||||
only requirement is that a single '=' be present in
|
||||
the string.
|
||||
|
||||
CLS
|
||||
Clear screen, causes the ANSI escape sequence ESC[2J to be
|
||||
sent to standard output.
|
||||
|
||||
CTTY /DEV/dev - Change console TTY. For instance:
|
||||
|
||||
CTTY /DEV/AUX
|
||||
|
||||
Would move all command I/O to the AUX port.
|
||||
|
||||
CTTY /DEV/CON
|
||||
|
||||
Would move it back to the normal device. The
|
||||
/dev/ prefix may be left off if AVAILDEV is
|
||||
TRUE (see configuration-file doc).
|
||||
|
||||
COMMAND internal commands take path arguments.
|
||||
|
||||
DIR <path>
|
||||
|
||||
COPY <path> <path>
|
||||
|
||||
DEL(ERASE) <path>
|
||||
If the path is a dir, all files in that dir
|
||||
are deleted.
|
||||
NOTE: The "Are you sure (Y/N)" prompt for DEL and
|
||||
ERASE now uses buffered standard input, so
|
||||
users must type a return after their answer.
|
||||
This gives them the chance to correct if they
|
||||
type 'y' by mistake.
|
||||
|
||||
TYPE <path> (must specify a file)
|
||||
|
||||
|
||||
|
||||
|
||||
FILCOM - compare two files
|
||||
|
||||
The FILCOM program compares two files and produces a log
|
||||
of differences between them. The comparison may be made
|
||||
in two fashions; either on a line-by-line basis, or on a
|
||||
byte-by-byte basis.
|
||||
|
||||
The line-by-line compare will isolate blocks of lines that
|
||||
are different between the two files and will print the
|
||||
blocks from each file. The line-by-line compare is the
|
||||
default when neither of the two files being compared has
|
||||
the extension .EXE, .COM, or .OBJ.
|
||||
|
||||
The byte-by-byte compare will display exactly which bytes
|
||||
are different between the two files. If either file being
|
||||
compared has extension .EXE, .COM, or .OBJ then the files
|
||||
will be compared in byte-by-byte mode.
|
||||
|
||||
|
||||
|
||||
RECOVER - recover files from a trashed disk.
|
||||
|
||||
If a sector on a disk goes bad, you can recover either the
|
||||
file that contained that sector (without the sector) or
|
||||
the entire disk (if the bad sector was in the directory).
|
||||
|
||||
To recover a particular file:
|
||||
|
||||
RECOVER <file-to-recover>
|
||||
|
||||
This will cause the file to be read sector by sector and
|
||||
to be have the bad sector skipped. Note that this implies
|
||||
that the allocation unit containing the bad sector will be
|
||||
read as much as possible. When such a bad sector is
|
||||
found, its containing allocation unit is marked as bad,
|
||||
thus preventing future allocations of that bad sector.
|
||||
|
||||
To recover a particular disk:
|
||||
|
||||
RECOVER <drive-letter>:
|
||||
|
||||
This will cause a scan to be made of the drive's FAT for
|
||||
chains of allocation units (files). A new root directory
|
||||
is then written that has entries of the form FILEnnnn.
|
||||
Each FILEnnnn will point to the head of one of the
|
||||
allocation unit chains.
|
||||
|
||||
If there are more chains than directory entries in the
|
||||
root, RECOVER prints a message and leaves the un-RECOVERED
|
||||
chains in the FAT so that RECOVER can be run again once
|
||||
some room has been made in the ROOT.
|
||||
|
||||
|
||||
|
||||
DEBUG ON MS-DOS 2.0
|
||||
|
||||
|
||||
When 2.0 DEBUG is invoked it sets up a program header
|
||||
atoffset 0 in its program work area. On previous versions it
|
||||
was OK to overwrite this header with impunity: this is true
|
||||
of the default header set up if no <filespec> is given to
|
||||
DEBUG. If DEBUGging a .COM or .EXE file, however, you must be
|
||||
careful not to tamper with the header of the program below
|
||||
address 5CH, to do this will probably result in a crash. It
|
||||
is also important that an attempt is not made to "restart" a
|
||||
program once the "program terminated normally" message is
|
||||
given. The program must be reloaded with the N and L commands
|
||||
in order for it to run properly.
|
||||
|
||||
NEW FEATURES
|
||||
|
||||
The A (Assemble) Command
|
||||
|
||||
FORMAT: A [<address>]
|
||||
|
||||
PURPOSE: To assemble 8086/8087/8088 mnemonics directly into
|
||||
memory.
|
||||
|
||||
o If a syntax error is encountered, DEBUG responds with
|
||||
|
||||
^ Error
|
||||
|
||||
and redisplays the current assembly address.
|
||||
|
||||
o All numeric values are hexadecimal and may be entered
|
||||
as 1-4 characters.
|
||||
|
||||
o Prefix mnemonics must be entered in front of the opcode
|
||||
to which they refer. They may also be entered on a
|
||||
separate line.
|
||||
|
||||
o The segment override mnemonics are CS:, DS:, ES:, and
|
||||
SS:
|
||||
|
||||
o String manipulation mnemonics must explictly state the
|
||||
string size. For example, the MOVSW must be used to
|
||||
move word strings and MOVSB must be used to move byte
|
||||
strings.
|
||||
|
||||
|
||||
o The mnemonic for the far return is RETF.
|
||||
|
||||
o The assembler will automatically assemble short, near
|
||||
or far jumps and calls depending on byte displacement
|
||||
to the destination address. These may be overridden
|
||||
with the NEAR or FAR prefix. For example:
|
||||
|
||||
0100:0500 JMP 502 ; a 2 byte short jump
|
||||
0100:0502 JMP NEAR 505 ; a 3 byte near jump
|
||||
0100:0505 JMP FAR 50A ; a 5 byte far jump
|
||||
|
||||
The NEAR prefix may be abbreviated to NE but the FAR
|
||||
prefix cannot be abbreviated.
|
||||
|
||||
o DEBUG cannot tell whether some operands refer to a word
|
||||
memory location or a byte memroy location. In this case
|
||||
the data type must be explicity stated with the prefix
|
||||
"WORD PTR" or "BYTE PTR". DEBUG will also except the
|
||||
abbreviations "WO" and "BY". For example:
|
||||
|
||||
NEG BYTE PTR [128]
|
||||
DEC WO [SI]
|
||||
|
||||
o DEBUG also cannot tell whether an operand refers to a
|
||||
memory location or to an immediate operand. DEBUG uses
|
||||
the common convention that operands enclosed in square
|
||||
brackets refer to memory. For example:
|
||||
|
||||
MOV AX,21 ;Load AX with 21H
|
||||
MOV AX,[21] ;Load AX with the contents
|
||||
;of memory location 21H
|
||||
|
||||
o Two popular pseudo-instructions have also been included.
|
||||
The DB opcode will assemble byte values directly into
|
||||
memory. The DW opcode will assemble word values directly
|
||||
into memory. For example:
|
||||
|
||||
DB 1,2,3,4,"THIS IS AN EXAMPLE"
|
||||
DB 'THIS IS A QUOTE: "'
|
||||
DB "THIS IS A QUOTE: '"
|
||||
|
||||
DW 1000,2000,3000,"BACH"
|
||||
|
||||
|
||||
o All forms of the register indirect commands are supported.
|
||||
For example:
|
||||
|
||||
ADD BX,34[BP+2].[SI-1]
|
||||
POP [BP+DI]
|
||||
PUSH [SI]
|
||||
|
||||
o All opcode synonyms are supported, For example:
|
||||
|
||||
LOOPZ 100
|
||||
LOOPE 100
|
||||
|
||||
JA 200
|
||||
JNBE 200
|
||||
|
||||
o For 8087 opcodes the WAIT or FWAIT prefix must be
|
||||
explictly specified. For example:
|
||||
|
||||
FWAIT FADD ST,ST(3) ; This lines will assemble
|
||||
; a FWAIT prefix
|
||||
|
||||
FLD TBYTE PTR [BX] ; This line will not
|
||||
|
||||
|
||||
|
||||
FORMAT enhancements
|
||||
|
||||
FORMAT will now install volume id's during the format
|
||||
process. DIR and CHKDSK will display these volume id's.
|
||||
|
||||
User programs can read the volume id on a particular drive
|
||||
by doing a 'search next' with the volume id attribute. It
|
||||
is impossible, using normal DOS calls, to delete a volume
|
||||
id or to create another one. The only way to create a
|
||||
volume id is to reformat the disk.
|
||||
|
||||
NOTE: On IBM systems the V switch must be given to FORMAT
|
||||
to have it do Volume IDs.
|
||||
|
||||
|
||||
|
||||
|
||||
CHKDSK FOR MS-DOS 2.0
|
||||
|
||||
|
||||
MS-DOS 2.0 has a tree structured directory scheme which
|
||||
did not exist on previous versions of MS-DOS. As a result
|
||||
CHKDSK is a much more complex program than in previous
|
||||
versions since it must perform a tree traversal to find all of
|
||||
the files on a given disk. It employes a depth first
|
||||
traversal in order to accomplish this.
|
||||
|
||||
Previous versions of CHKDSK automatically "fixed"
|
||||
disks (regardless of whether it was appropriate). CHKDSK 2.00
|
||||
run normally will not alter the disk in any way, it simply
|
||||
reports on any inconsistencies found. To actually "fix" a
|
||||
disk CHKDSK must be run with the F switch (Fix). This allows
|
||||
you to perhaps take some alternate (to CHKDSK repairs) action
|
||||
before letting CHKDSK loose on your disk.
|
||||
|
||||
CHKDSK 2.00 will report on non-contiguous allocation units
|
||||
(extents) for specified files. This is handy for gaging how
|
||||
"fragmented" a disk volume has become. This is done by simply
|
||||
giving a filespec:
|
||||
|
||||
CHKDSK B:*.*
|
||||
|
||||
This would report extents for all files in the current
|
||||
directory for drive B after doing a normal consistency check
|
||||
on drive B. Files which have many extents can be copied and
|
||||
renamed to restore them to a contiguous state, thus improving
|
||||
I/O performance to the files.
|
||||
|
||||
Previous versions of CHKDSK would simply free
|
||||
allocation units which were marked as used, but were not
|
||||
actually part of any file. CHKDSK 2.00 will recover these
|
||||
"orphan" allocation units if specified. If orphan allocation
|
||||
units are found, CHKDSK prompts for free or recover. Free
|
||||
just frees the orphans as previous versions did, recover will
|
||||
employ allocation chain analysis to create "orphan files" in
|
||||
the root directory of the disk. These files will have the
|
||||
form "%ORPHAN%.l$$" where l will take on some ASCII value
|
||||
greater than '@'. These files may then be inspected to see if
|
||||
valuable data was contained in them. If there is not enough
|
||||
room to make all of the "orphan" files, CHKDSK leaves the
|
||||
unrecovered chains in the FAT so that CHKDSK can be run again
|
||||
(once some entries in the ROOT have been deleted). NOTE:
|
||||
Making ORPHAN files is a SLOW process.
|
||||
|
||||
Verbose mode. CHKDSK 2.00 may be run with the V switch
|
||||
which causes a trace of the files and directories being
|
||||
processed to be printed as CHKDSK runs.
|
||||
|
||||
|
||||
FILTERS FOR MS-DOS 2.0
|
||||
|
||||
A filter is a utility that reads from standard input,
|
||||
modifies the information in some way, then writes the result
|
||||
to standard output. In this way the data is said to have been
|
||||
"filtered" by the program. Since different filters can be
|
||||
piped together in many different ways a few filters can take
|
||||
the place of a large number of specific purpose programs. The
|
||||
following describes the filters that are provided with MS-DOS
|
||||
2.0:
|
||||
|
||||
CIPHER <key word>
|
||||
|
||||
Cipher reads a program from standard input, encrypts it
|
||||
using the key word provided by the user, then writes the
|
||||
result to standard output. To decrypt the file simply run
|
||||
CIPHER again using the same keyword. For example:
|
||||
|
||||
A>CIPHER MYSTERY <NSA.CIA >SECRET.FIL
|
||||
|
||||
This command line will read file NSA.CIA, encrypt it using
|
||||
the key word "MYSTERY", then write the result to file
|
||||
SECRET.FIL To view the original file the following command
|
||||
line could be used:
|
||||
|
||||
A>CIPHER MYSTERY <SECRET.FIL
|
||||
|
||||
This will read file SECRET.FIL, decrypt the file using the
|
||||
key word "MYSTERY", then write the result to standard output,
|
||||
which in this case is the console.
|
||||
|
||||
FGREP
|
||||
|
||||
This filter takes as arguments a string and optionally a
|
||||
series of file names. It will send to standard output all
|
||||
lines from the files specified in the command line that
|
||||
contain the string.
|
||||
|
||||
If no files are specified FGREP will take the input from
|
||||
standard in. The format for the command line invocation of
|
||||
FGREP is:
|
||||
|
||||
FGREP [<option>] <string> <filename>*
|
||||
|
||||
The options available are:
|
||||
|
||||
/v Will cause FGREP to output all lines NOT
|
||||
containing the specified string.
|
||||
|
||||
/c Will cause FGREP to only print the count of
|
||||
lines matched in each of the files.
|
||||
|
||||
/n Each line matched is preceded by its relative
|
||||
line number in the file.
|
||||
|
||||
The string argument should be enclosed in double quotes.
|
||||
Two double quotes in succession are taken as a single double
|
||||
quote. So,
|
||||
|
||||
A>FGREP "Fool""s Paradise" book1.txt book2.txt bible
|
||||
|
||||
will output all lines from the book1.txt, book2.txt and bible
|
||||
(in that order that contain the string: Fool"s Paradise .
|
||||
And,
|
||||
|
||||
A>dir b: | fgrep /v "DAT"
|
||||
|
||||
will output all names of the files in disk b: which do not
|
||||
contain the string DAT .
|
||||
|
||||
MORE
|
||||
|
||||
The filter MORE reads from standard input, sends one
|
||||
screen full of information to standard output and then pauses
|
||||
with message:
|
||||
|
||||
-- More --
|
||||
|
||||
Pressing the RETURN key will cause another screen full of
|
||||
information to be written to standard output. This process
|
||||
continues until all the input data is read.
|
||||
|
||||
SORT [/R] [/+n]
|
||||
|
||||
Sort reads from standard input, sorts the data, the writes
|
||||
the information to standard output. The sort is done using
|
||||
the ASCII collating sequence. There are switches which allow
|
||||
the user to select various options:
|
||||
|
||||
R - Reverse the sort, that is make "Z" come before "A"
|
||||
|
||||
+n - Sort starting with column "n" where n is some integer.
|
||||
The default is start the comparisons with column 1,
|
||||
this switch allows the user to start in any column.
|
||||
|
||||
example:
|
||||
|
||||
A>SORT /R <UNSORT.TXT >SORT.TXT
|
||||
|
||||
This command line will read the file UNSORT.TXT, do a reverse
|
||||
sort, then write the output to file SORT.TXT
|
||||
|
||||
A>DIR | SORT /+14
|
||||
|
||||
This command line will cause the output of the directory
|
||||
command to be piped to the sort filter, the sort filter will
|
||||
sort starting with column 14 (This is the column the file size
|
||||
starts), then send the output to the console. Thus a
|
||||
directory sorted by file size will be the result. To get real
|
||||
fancy:
|
||||
|
||||
A>DIR | SORT /+14 | MORE
|
||||
|
||||
will do the same thing except that MORE will give you a chance
|
||||
to read the directory before it scrolls off the screen.
|
||||
|