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 936 >nul
setlocal enabledelayedexpansion

:: 获取管理员权限
fltmc >nul 2>&1 || (
    echo 正在请求管理员权限...
    powershell start -verb runas '%0'
    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=请输入需要创建的磁盘盘符:

:: 转换大小写并只取第一个字符
set hdd=%hdd:~0,1%
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 (
    if /i "!hdd!"=="%%i" set hdd=%%i
)

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

:: 判断目录是否存在
if EXIST "C:\%hdd%" (
    echo 已经存在 C:\%hdd% 目录,直接映射虚拟磁盘
    goto REG
)

:: 创建目录
echo 1. 正在创建目录 C:\%hdd% 
md "C:\%hdd%" 2>nul
if errorlevel 1 (
    echo 创建目录失败!
    goto END
)
attrib +S +H +R "C:\%hdd%"

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

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

if errorlevel 1 (
    echo 注册表写入失败!
    goto END
)

echo.
echo ========================================
echo 成功!虚拟磁盘驱动器 %hdd%: 已映射到 C:\%hdd%
echo 请立即重启系统,重启后配置生效!
echo ========================================

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