subst | |
Developer: | Microsoft, IBM, Digital Research, ReactOS Contributors |
Operating System: | MS-DOS, PC DOS, SISNE plus, OS/2, eComStation, ArcaOS, DR DOS, ROM-DOS, PTS-DOS, FreeDOS, Windows, ReactOS |
Platform: | Cross-platform |
Genre: | Command |
In computing, SUBST
is a command on the DOS, IBM OS/2,[1] Microsoft Windows and ReactOS[2] operating systems used for substituting paths on physical and logical drives as virtual drives.
In MS-DOS, the SUBST
command was added with the release of MS-DOS 3.1.[3] The command is similar to floating drives, a more general concept in operating systems of Digital Research origin, including CP/M-86 2.x, Personal CP/M-86 2.x, Concurrent DOS, Multiuser DOS, System Manager 7, REAL/32, as well as DOS Plus and DR DOS (up to 6.0). DR DOS 6.0 includes an implementation of the command.[4] The command is also available in FreeDOS[5] and PTS-DOS.[6] The Windows SUBST
command is available in supported versions of the command line interpreter cmd.exe.[7] In Windows NT, SUBST
uses [http://msdn.microsoft.com/en-us/library/aa363904%28VS.85%29.aspx DefineDosDevice]
to create the disk mappings.
The [[JOIN (command)|JOIN]]
command is the "opposite" of SUBST
, because JOIN
will take a drive letter and make it appear as a directory.
Some versions of MS-DOS [[COMMAND.COM]]
support the undocumented internal [[TRUENAME]]
command which can display the "true name" of a file, i.e. the fully qualified name with drive, path, and extension, which is found possibly by name only via the PATH environment variable, or through SUBST
, JOIN
and [[ASSIGN (DOS command)|ASSIGN]]
filesystem mappings.
This is the command syntax in Windows XP to associate a path with a drive letter:
SUBST [drive1: [drive2:]path] SUBST drive1: /D
'''drive1:'''
– Specify a virtual drive to which to assign a path.'''[drive2:]path'''
– Specify a physical drive and path to assign to a virtual drive.'''/D'''
– Delete a substituted (virtual) drive.This means that, for example, to map C:'s root to X:, the following command would be used at the command-line interface:
Upon doing this, a new drive called X: would appear under the My Computer virtual folder in Windows Explorer.
To unmap drive X: again, the following command needs to by typed at the command prompt:
A custom label can be assigned to a drive letter created in this way by way of a registry key, which can be created by renaming (select "rename" from the drive letter context menu or press) the SUBST drive in Windows Explorer/My Computer.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\DriveIcons\M\DefaultLabel\
(DefaultValue) = ''Your Drive Label''
"M" represents the drive letter to assign a custom label to.
However, labels created for SUBST drives in this manner are overridden by the label of the host drive/partition: the custom labels are only used if the host drive has no label. One may then:
Note that the LABEL command is NOT able to change the label name of a drive letter created using subst.[8] LABEL is one of several commands that only work on physical drives.[9]
Drive letters mapped with the command are not available during system startup for services nor do they persist across a reboot.
The DOS Devices mechanism that underlies subst can be set in registry. This way, the mapped drives are usable immediately during startup.
Create a new registry entry "String Value" in the following key:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices
The name should be "X:
" where X is the drive letter.
The value should be the path in one of the following NT Object Manager forms:
\??\C:\some\directory
(preferred)\DosDevices\C:\some\directory
(long version of the former)\Device\Mup\127.0.0.1\C$\some\directory
(discouraged, as this goes through SMB share)There are tools available to make the necessary changes for the user, including .
The relative to this thematic registry key is HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices
. It defines mapping of drive letters into particular hard disk partitions, similar to /etc/fstab on a Unix system. It also can be edited manually, but only at that time while that particular installed Window operation system is "inactive". So that, for example, if you currently boot from "D:\Windows
" then you can edit the HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices
key of Windows that is installed in a "C:\Windows
" folder, for an instance by doing the following actions:
reg load hklm\$system C:\WINDOWS\system32\config\system
regedit.exe
HKEY_LOCAL_MACHINE\$system\MountedDevices
HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices
registry key of the Windows instance that is installed in C:\WINDOWS
)regedit.exe
reg unload hklm\$system
(to complete the editing procedure)The easiest way to do this is to create a registry file (.reg), and double click the file to import the settings into the registry.
Here is an example registry file.
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices]"F:"="\\??\\D:\\Mount\\db""G:"="\\??\\D:\\Mount\\log"
After configuring the registry the computer must be rebooted for the changes to take effect.
Create a batch file to run the built-in SUBST
command to create a virtual drive letter for the existing mount points and place it in the user accounts startup folder.
This is not preferred, as the mapping only appears at the end of user logon.
Here is an example:
Edit the registry to run the built-in subst command during computer startup or user logon by leveraging the appropriate Run registry key. The easiest way to do this is to create a registry file (.reg), and double click the file to import the settings into the registry. This is not preferred, as the mapping only appears at the end of bootup.
Example to run during computer boot
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]"F Drive"="SUBST f: d:\\mount\\db""G Drive"="SUBST g: d:\\mount\\log" The computer must be rebooted for the changes to take effect. Example of user logon
[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]"F Drive"="SUBST f: d:\\mount\\db""G Drive"="SUBST g: d:\\mount\\log"
The user must log off and back on for the changes to take effect.
[[autorun.inf]]
files present in the new drive letter are ignored; thus, AutoRun/AutoPlay does not work on drive letters created in this way. In addition, assigning a custom icon or label to the drive letter created this way via autorun.inf
does not work. A custom label assigned to the drive letter created with subst
only appears if the source drive/volume does not have a volume label set (check and set with the [[label (command)|label]]
command).