65.9K
CodeProject 正在变化。 阅读更多。
Home

DriveLetterChanger

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.56/5 (7投票s)

2018年1月24日

GPL3

4分钟阅读

viewsIcon

22295

downloadIcon

493

在 Windows 中使用多个外部驱动器时更改驱动器号的解决方法

简介(用少于30 40 47个字介绍项目)

最近,我遇到了一个从未想过会成为问题的问题。 如果您有一组硬盘连接到计算机,则驱动器号似乎并不总是相同的。

这是一个处理它的实用方法。

代码

背景

问题的详细说明

当您连接不同的硬盘(在我的例子中是通过eSATA)并且希望它们始终具有相同的驱动器号时,您会面临驱动器号并不总是相同的问题。 当连接来自16个驱动器的池中的(在我的例子中是八个)驱动器时,让它们具有相同的驱动器号似乎是一个问题。 如果您共享驱动器,例如,将驱动器用作备份目标,这可能是一个问题。

我不是在讨论驱动器号被另一个驱动器使用或多个驱动器连接的情况。 我正在讨论一个场景,其中来自16个驱动器池中的两个驱动器同时连接。(Mo – 媒体和4 Fr媒体集。)

想法

我猜Windows会将所有连接的驱动器添加到一个列表中,当我手动为其分配自定义驱动器号时。 在我的测试中,只要您始终分配不同的驱动器号,这就可以正常工作。 例如,如果您有两个驱动器,您想使用字母 K,它仅对上次手动分配的驱动器有效。 如果您连接另一个驱动器,它将获得第一个空闲驱动器号。(在 Windows Server 2012 R2、Windows 10 Pro 上测试。)

因此,如果 Windows 不“愿意”跟踪驱动器,我们必须将它们放在我们自己的列表中。

您现在需要的是每个驱动器(& 卷)都具有的驱动器 GUID 和目标驱动器号。

结果

使用一点 WMI 魔法,我们可以迭代所有连接的驱动器(本地、USB、SATA)并更改或删除驱动器号。

将所有要求与魔法结合在一起,将引导我们形成一个概念,即拥有一个小应用程序,该应用程序从文本文件中读取驱动器列表,删除任何可能已经使用的驱动器号,并最终根据列表数据重新分配所有驱动器号。

听起来很简单,对吧?

如何使用它

首先,该应用程序只有以管理员身份运行时才能工作,因为标准用户不允许更改驱动器号。

当应用程序启动时没有参数,它会将所有当前连接的(它们实际上不需要有驱动器号)驱动器和卷列到屏幕上,并列到应用程序目录中名为“CurrentDrives.txt”的文本文件中。

写入的文本文件如下所示

在我的例子中,您看到我的c驱动器已连接,并且字母p已分配给连接的 USB 拇指驱动器。

正如您所注意到的,我的系统还有三个当前没有任何已分配驱动器号的分区(或卷)。 这些是恢复分区和隐藏的 Windows 分区,Windows 在设置时创建的。

要使应用程序更改驱动器号,您必须创建一个文本文件,其中包含驱动器 GUID,后跟一个制表符,后跟它应该获得的驱动器号。(您可以从刚刚生成的文本文件中复制并粘贴出来)。

如果我想将拇指驱动器的驱动器号从 p 更改为 t,这就是文件

请记住,您需要成为管理员才能更改驱动器号!

下一步,进一步的想法

在我的例子中,我将该应用程序用作固定时间的计划任务。 但我可以考虑的是,在连接外部媒体后运行它一次。 这可以绑定到任务计划程序中事件的发生。 还添加了源代码,请随意尝试。

副项目

作为一个副项目,我准备了另一个名为 DriveLetterMaker 的工具,该工具基于 snoopy001 在此评论部分中的想法。(我这边做了一些更新...)

DriveLetterMaker 背后的想法是,您连接的设备包含一个名为 Make_Me_Drive_X.txttextfile,该文件定义了它应该是什么驱动器号。 当工具运行时,它会删除该列的任何现有驱动器号,并分配文件名中的驱动器号。 不读取文本文件的内容,所以这根本不重要。 这将减少处理大量卷 GUID 的工作量。

这是这些文件

历史

  • 2018年1月24日:发布版本1.00
  • 2018年1月26日:添加了 DriveLetterMaker 版本 1.00
© . All rights reserved.