Enhanced DOSKEY.com
--- Freeware ---

[page last modified 8/26/2014]

This program is an enhanced, drop-in replacement for the DOSKEY.COM that ships with MS-DOS and Windows 9x/Me.  Although enhanced, it has a smaller disk and memory resident footprint.  It is a great addition to DOS boot diskettes, and to the Win 9x/Me environment if the DOS box is used frequently.  Note: will not operate under Windows NT/2000/XP (it's not needed since those systems have completion mechanisms built-in).

The primary added feature is command and file "auto-completion" via the tab key.  Depending on the context, either a matching command or filename (or path) will be supplied.  This is a huge timesaver when using the command line.

In the following examples user-entered text is in CAPS and the auto-completed text – which appears when the user enters a TAB key -- is in italics.  The "_" represents the cursor position after auto-completion:

c:\> XCopy.exe  _
c:\> CD \Windows\_
c:\> DIR Autoexec.bat  
_

If there is more than a single matching completion, the user can repeatedly press the TAB key to cycle through the matches as they appear on the command line.   Entering  <shift>TAB  will go backward through the list of matches (if, for example, you pressed TAB one too many times).

To install, rename your existing DOSKEY.COM (to save it) and download the replacement.  To remove, delete the downloaded DOSKEY.COM and rename your original back to DOSKEY.COM.

[Note to Windows/ME users: the "System File Protection" feature in this OS guards against a direct replacment of DOSKEY.COM -- install and load the enhanced DOSKEY.COM from another directory of your choice, and don't rename the Windows/Me original.]

Hope you like it.  I wrote this many years ago to make the DOS command line easier to use, and still find myself relying on it every day.


Change Log

10/15/02 - Version 1.4: Fixed bad command line parsing (switches could damage macro definitons, -m did not work).

Click here to download  doskey14.zip

10/18/02 - Version 1.5: Added basic emacs compatible control sequences.

Click here to download  doskey15.zip

1/22/03 - Version 1.6: Fixed tab completion bug writing past end of command line. Removed "\" at end of input line when user exits tab completion with a CR -- this functions better with commands such as CD, RD and COPY.

Click here to download  doskey16.zip

9/26/03 - Version 1.7: Removed "\" at end of directory name when user exits tab completion with a space -- this functions better with commands such as MOVE, REN and COPY which object to a trailing "\" on the source.

Click here to download  doskey17.zip

10/22/03 - Version 1.8: Caused high ASCII (>=80h) to be recognized as filename/path characters. Fixes a problem where umlaut chars were being viewed as separators instead of parts of a valid filename.

Click here to download  doskey18.zip

6/14/09 - Version 1.9: Stop executing Win 95 interrupt on versions of DOS that do not implement it. Though never functionally a problem, this change allows doskey to run at 0% CPU (when idle) in Virtual Machines running DOS 6.x, when paired with power management software such as DOSIDLE.EXE.

Click here to download  doskey19.zip

6/29/09 - Version 2.0: Further small change to improve CPU utilization when idle (at DOS prompt) in a Virtual Machine. No other functional difference. (As of 9/11/2011, an additional archive with full source is available.)

Click here to download  doskey20.zip

Click here to download with full source  doskey20src.zip

7/24/14 - Thank you to Wengier Wu, who has provided a modified Doskey with source enhanced to support long file names. I have not tested this code (I no longer have the ability to run DOS, or any 16-bit code). I did look at the source changes to insure they were benign, and verified the executable was built from the source. If you have questions or comments about the LFN implementation, Mr. Wu has permitted a contact email address to be posted: wengierwu@yahoo.com. His comments:

I decided to go ahead myself to modify your DOSKEY 2.0 source code and
finally managed to add LFN support into it, and tentatively named it as
version 2.1.  This DOSKEY 2.1 will use LFN API whenever possible (e.g. under
MS-DOS 7 + DOSLFN or in a Win9x DOS window), or will fallback to 8.3 names if
LFN API is unavailable (e.g. on real-mode MS-DOS 6.x or 7.x without DOSLFN).
By now I have tested it and worked under the following environments:

  1. Real-mode MS-DOS 6.22 boot disk (8.3 filename only)
  2. Real-mode MS-DOS 7.10 + DOSLFN 0.41c (supporting LFN)
  3. Windows 95 DOS window (supporting LFN)
  4. Windows 98SE DOS window (supporting LFN)

I have not tested extremely long file names though, and it also won't
automatically add quotation marks ("") when there are spaces in the long file
name. Unlike DOSKEY 2.0, this DOSKEY 2.1 will not convert the appended partial
file/dir names into lower case, but instead will append the partial names
exactly as they are stored in the disk (e.g. Windows98SETUP.exe).

I have further updated DOSKEY to version 2.2. Major changes from version 2.1 are:

1. Added options /D and /E to disable and enable LFN support per user request
   (LFN enabled by default, as in version 2.1).
2. Bugfix: When LFN is available and user entered partial file/dir name that
   only matches 8.3 filename but not LFN (e.g. when typing WINDOW~1 instead of
   WINDOWS98), the completed file/dir name was not correct. Now it will be
   expanded to a complete 8.3 filename (e.g. WINDOW~1.EXE) in this particular
   case.
3. Increased default buffer size to 640 reflecting an increase of file/find
   buffer for better support for long path names.
4. Other minor changes relating to LFN.

Click here to download  doskey22.zip

Click here to download with full source  doskey22src.zip

8/26/14 - More thanks to Wengier Wu, who has provided a further enhanced Doskey version 2.5. Mr. Wu can be contacted at wengierwu@yahoo.com. His comments:

Due to the fact that the last public release (i.e. DOSKEY 2.2) was not yet
LFN feature complete (for example, it lacked the ability to auto-insert quotation
marks when there are spaces within LFN), I had made further updates to it which
should, presumably, completely solve such issues by now. In addition, I have
also added a number of other features that I considered to be very useful.
These features are not necessarily limited to LFN support, or even to Tab
Completion, but may instead relate to other features of Enhanced DOSKEY such
as macro support. Some of such features were already in the "Stuff to do" list
of the source code for a few years, like auto-translation of "macro=[text]" to
the "doskey macro=[text]" functionality and the redefinition of the F1-F12
function keys, which are now implemented. Because of the number of new
features that are introduced in this version, I have increased the version
number to 2.5. It should be considered stable, since it had been more or less
actively used/tested by myself during the last month, and it had also been
tested by another user (to whom I had also made discussion of some new
features). Of course, since it is not possible for me or the other user to
test all possibilities, bugs can still exist and bug reports made by anyone
are certainly welcome. However, after all these testings I can confidently say
that even if they do exist they should only been relative minor ones, or only
occur in some very rare cases. Indeed, this DOSKEY 2.5 has not only been
tested in English DOS/Win9x systems, but also in French and German DOS or
Win9x systems, as well as Chinese/Japanese/Korean DOS/Win9x systems for DBCS
(double-byte character set) support. Below is the detailed changelog from
version 2.2:

1. Support the use of the ALT+F5 shortcut to toggle LFN support. Press ALT+F5
   to disable LFN support if it is enabled, and press ALT+F5 again to enable
   LFN support if it is disabled. Except for the effect of toggling, they are
   functionally equivalent to options -D and -E respectively, but will be
   achieved faster and more easily once DOSKEY is installed. This shortcut is
   useful for example when trying to temporarily using certain (mostly older)
   programs that do not understand LFN at all. Otherwise it is generally not
   recommended to disable LFN support because DOSKEY will automatically
   fallback to short file names when LFN API is not available;
2. Full support the use of quotation marks ("") either when LFN is available
   or when the DOS version is found to be at least 7 (unlike MS-DOS 6.xx or
   earlier, MS-DOS 7+ understands quotes even if DOSLFN is not loaded). In
   such cases Tab completion will automatically identify, add and/or even
   change/remove/reformat (the latter three in CHANGE mode, see below)
   quotation marks when necessary. The most useful utilization of this
   feature is probably the ability to automatically insert quotes when
   necessary (i.e. when there are spaces or some other special characters in
   the file name), especial in LFN, but since MS-DOS 7+ supports spaces in
   short file names as well, DOSKEY can now handle this case too. If DOSKEY is
   used in MS-DOS 6.xx or earlier without LFN support then the quotation marks
   will not be supported because commands in these systems do not understand
   quotes anyway;
3. New CHANGE mode (use -C option to turn it on), which will automatically
   change the command/file name the user has typed in to match the actual name
   (e.g. "win" and "progra~" will be changed and completed to be "WINDOWS" and
   "Program Files" respectively). In CHANGE mode quotation marks will also be
   automatically changed/removed/reformatted when necessary. Use -A option to
   convert back to the APPEND mode, which only appends characters (which is
   the default and it is also the only supported mode in all earlier versions
   of Enhanced DOSKEY), or use the ALT+F9 shortcut to toggle between APPEND
   mode and CHANGE mode. But note that since in APPEND mode DOSKEY is not
   allowed to change anything that the user has already typed, unlike in CHANGE
   mode, the opening quotation mark will be inserted at the current cursor
   location when it is necessary to add quotes for file names with spaces or
   other special characters AND the user has not add a quote manually. Quotes
   within the middle of file name are perfectly fine supported by DOS/Win9x
   systems that understand quotes, as long as characters such as spaces have
   been properly quoted;
4. Added support for including system and hidden files or directories in Tab
   completion. DOSKEY 2.2 and earlier versions always exclude system and
   hidden files or directories, but now the user can use -S option to includes
   them. Use -N option to exclude them again, which is the default, or the
   user can use the ALT+F11 shortcut to toggle the inclusion of system and
   hidden files;
5. If the command entered are CD/MD/RD (or CHDIR/MKDIR/RMDIR), then its
   arguments that Tab completion will complete are limited to directories (not
   files), unless they have been redefined as macro names. This is very similar
   to the feature existed in Command Prompt in recent versions of Windows (NT
   family of Windows);
6. Support the use of Ctrl+Tab key to directly enter into a directory instead
   of looping into the next same level directory (as will be done by the Tab
   key);
7. Support the use of F11 key to show all matching commands or file names from
   the current command line. This feature can be very handy for use with Tab
   completion;
8. Support any command buffer length between 128 and 255. Probably all earlier
   versions of Enhanced DOSKEY only work with the default length of 128, but
   in MS-DOS 7+ the user can use the /U option of COMMAND.COM to specify any
   command buffer length between 128 and 255
   (e.g. SHELL=C:\COMMAND.COM /P /U:255 in CONFIG.SYS). Now DOSKEY fully
   supports this as well. This feature was requested by a user;
9. Now commands in the format "macroname=xxx" (without quotes) are supported
   and have the same functionality as "doskey macroname=xxx" (i.e. defining
   macro with the name "macroname" to value "xxx") once DOSKEY is installed,
   but it is shorter and also faster because it will directly operate in
   memory instead of re-loading the executable. This can be very convenient
   for users who work with DOSKEY macros;
10. Implemented function key=macro logic (allow func key redefinition). Valid
    function keys are from F1 to F12. For example, after defining the macro
    "f1=dir $*" and pressing the F1 key, DOSKEY will display "f1 " and wait
    for the input of optional arguments. On the other hand, defining "f1!=dir"
    (with a "!" after "f1") will cause the dir command to be executed
    immediately after pressing the F1 key. If both macros are defined, the
    latter (the one with a "!" sign) will take precedence;
11. Added support for $0 in macro definition which resembles %0 in batch file,
    in addition to $1-$9 which resemble %1-%9 in batch files respectively;
12. Added support for "?" and "*" wildcards in Tab completion. "?" will match
    one character, this includes support for double-byte characters as well,
    which are used in East Asian (Chinese/Japanese/Korean) versions of
    DOS/Win9x systems with LFN support, and it has been tested on such systems
    in addition to western versions of DOS/Win9x. The other wildcard "*" will
    match any number of characters, but due to the special functionality of
    this wildcard the APPEND mode and CHANGE mode will handle it differently.
    In CHANGE mode the auto-completion will change wildcards into actual names,
    but in APPEND mode the auto-completion will only append "*.*", ".*" or "*"
    when necessary if the user has already typed a "*" wildcard in the command
    line (possibly in the middle of the partial file name) and there are
    matches in such cases. This is because of the functional differences
    between the two modes, and again the fact that DOSKEY is not allowed to
    change anything that the user has already typed when APPEND mode is being
    used, unlike in CHANGE mode. If the "*" wildcard is the last character that
    the user typed and LFN support has been enabled, there is probably no need
    for auto-completion to append anything (in APPEND mode) because the "*"
    wildcard will match the dot too when LFN is available, unlike in the short
    file name only mode. Note that some DOS commands such as CD do not support
    wildcards in their arguments, so it is recommended to use CHANGE mode
    instead of APPEND mode when trying to combine these commands with
    wildcards, since in CHANGE mode the Tab key will automatically convert
    wildcards into actual names;
13. Added distinctions among characters that are 1) allowed in both LFN and
    short file names, 2) characters only allowed in LFN and don't need to be
    quoted, 3) characters only allowed in LFN and needed to be quoted, and
    4) characters that are not allowed in either LFN or short file names. Note
    that the pipe char ("|") and the backslash ("\") are special cases; while
    they are usually considered to be separators instead of actual file/dir
    name chars, they are in fact valid file/dir name characters in both LFN and
    short file names when used as the second byte of a double-byte character
    in a DOS/Win9x system that can handle them. Similar for the "[" and "]"
    chars, which are otherwise only valid in LFN. Now DOSKEY supports the
    handling of all these cases when using such systems;
14. Added support for the BackSpace and other editing keys such as
    LEFT/RIGHT/DELETE to delete or move between double-byte characters
    consisting of two bytes in addition to regular single-byte characters on
    double-byte enabled systems (Chinese/Japnese/Korean versions of DOS/Win9x).
    Note that this is actually the default behavior for the BackSpace key on
    such systems when DOSKEY is not installed, but (probably all) earlier
    versions of Enhanced DOSKEY incorrectly changed this behavior when used on
    these systems. Similarly, the keystorke overwrite/insert function and Tab
    completion are now compatible with double-byte characters on these systems
    too;
15. Added option -V to display current DOSKEY settings, such as the current
    BUFSIZE and whether LFN support has been enabled or not, and so on;
16. Rewrote the handler for enabling/disabling the Win95 QueryClose function
    for better compatibility. Now it will directly check the Windows version
    (at least 4) at command line start runtime, instead of checking DOS
    version and if Windows 3.x/9x API is present at DOSKEY loading time,
    because the latter approach would fail if DOSKEY is loaded before Windows
    9x GUI starts (in such case QueryClose would not function at all), or if
    the user is running Windows 3.x on DOS 7+, but Windows 3.x does not support
    the Win95 QueryClose function. When running in real-mode DOS 6.x or 7.x in
    virtual machines DOSKEY will still run at 0% CPU when DOS is idle and power
    management software such as DOSIDLE.EXE is installed;
17. Fixed some bugs that probably existed in most (if not all) earlier
    versions of Enhanced DOSKEY, such as a bug in command option handling and
    another bug relating to the macro;
18. Some other smaller changes or bugfixes.

Click here to download  doskey25.zip

Click here to download with full source  doskey25src.zip


You are visitor 60100           Go to Home Page