1. 目的

目前win10磁盘分区多数人采用两种方式:

1:只分一个C盘,文件在C盘以目录区分。

缺点:所有文件都在一起,区分查找比较麻烦。

2:物理分区,分多个盘,如C,D,E等等

缺点:容量固定,配置后无法修改,可能出现磁盘空间不够,容易引起文件目录碎片化。

偶然间发现新的方式,在C盘的基础上,可以虚拟出D,E...等磁盘。虚拟出来的盘可以相当于物理分区一样使用,所有虚拟磁盘和映射目录的磁盘共享容量。

贴一张效果图:(实际上我只有1个1T的SSD固态)

2. 原理

window的subst命令可以创建虚拟磁盘,并将目录映射到虚拟磁盘

subst 虚拟磁盘盘符  物理磁盘符:路径

例如,将C盘的C:\D目录映射为D盘,将C盘的C:\E目录映射为E盘

打开cmd控制台,执行:

> subst  D C:\D
> subst  E C:\E

问题:

上面方式存在以下问题,每次重启后,虚拟磁盘映射消失。

下面使用注册表方式,解决重启映射消失问题。

3. 操作步骤

以1T硬盘为例子演示整个操作过程。

  1. 格式化整个硬盘并安装WIN10系统到整个硬盘

    完成后,系统只存在一个C盘,容量大小为1T。

  2. 在C盘创建映射目录,映射目录名为D,E...

    完成后,可以顺利访问 C:\D路径 和 C:\E路径

  3. 修改映射目录属性, 隐藏映射目录

    打开cmd控制台,执行Dos命令,设置 C:\D 目录和 C:\E 目录为隐藏系统目录

    > attrib +S +H C:\D
    > attrib +S +H C:\E
    

    查看帮助使用 attrib /?

  4. 创建注册表文件并执行,配置虚拟磁盘映射

    创建 make_subst.reg 注册表文件,内容如下:

    Windows Registry Editor Version 5.00
    
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices]
    "D:"="\\??\\C:\\D"
    "E:"="\\??\\C:\\E"
    

    注意: 路径中的每个反斜杠都要加倍,\\?? 是NT对象管理器名称空间中的虚拟目录, 需要保留.

    双击执行 make_subst.reg

  5. 重启操作系统

    重启之后,可以发现多了 D盘 和 E盘两个驱动器,这两个驱动器的容量和C盘一样,都是1T大小,并且映射在C:\D和 C:\E目录。C,D,E这3个驱动器共享空间大小。新映射出来的D和E虚拟磁盘可以和普通的物理分区一样使用。

批处理文件

创建make_virtual_hdd.bat批处理文件并执行

@echo off

chcp 65001

:: 管理员权限
@%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit  
@cd /d "%~dp0"

cls
:again

echo *************************************************************************************
echo ***** 批处理程序,用于创建并映射虚拟磁盘到新的盘符                           ********
echo ***** 帮助:                                                                 ********
echo *****     1. 启动make_virtual_hdd.bat脚本                                    ********
echo *****     2. 输入新映射的磁盘盘符。(如 D,E,Z等等)                          ********
echo *****     3. 重启系统后生效                                                  ********
echo ***** 注意:新映射的盘符必须未被目前系统使用                                 ********
echo ***** 例如:启动批处理后,输入Z,重启后系统多出一个虚拟磁盘Z,容量与C盘共享  ********
echo *************************************************************************************


echo.
set /p hdd=请输入需要创建的磁盘盘符:


:: 转换大小写
for %%i in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do call set hdd=%%hdd:%%i=%%i%%


:: 判断磁盘是否存在
if exist %hdd%: (
echo 已经存在%hdd%盘,无法映射虚拟磁盘
goto END
)
 
:: 判断目录是否存在
IF EXIST C:\%hdd% (
echo 已经存在C:\%hdd%目录,无法映射虚拟磁盘
goto END
)

:: 创建目录
echo 1. 正在创建目录 C:\%hdd% 
md C:\%hdd%
attrib +S +H +R  C:\%hdd%

:: 设置目录图片
echo [.ShellClassInfo] >> C:\%hdd%\desktop.ini
echo IconResource=C:\Windows\System32\SHELL32.dll,273 >> C:\%hdd%\desktop.ini
echo [ViewState] >> C:\%hdd%\desktop.ini
echo Mode= >> C:\%hdd%\desktop.ini
echo Vid= >> C:\%hdd%\desktop.ini
echo FolderType=Generic >> C:\%hdd%\desktop.ini
attrib +S +H  C:\%hdd%\desktop.ini


::添加注册表
echo 2. 正在注册虚拟磁盘驱动器
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices"  /v "%hdd%:"  /d "\??\C:\%hdd%" /f

echo 虚拟磁盘驱动器%hdd%映射完成。请立即重启,重启后配置生效。

:END
pause
 posted on 2022-07-17 22:14  猛练自然强  阅读(724)  评论(1编辑  收藏  举报