【问题标题】:Remove all drive letters via diskpart.exe通过 diskpart.exe 删除所有驱动器号
【发布时间】:2018-04-11 12:04:56
【问题描述】:

因为我正在寻找一个程序化的答案,所以我在 SO 上发布这个问题,尽管它的边界正如人们在这个 related and migrated 问题上看到的那样。

我正在尝试自动删除启动到 Windows PE 的系统中所有分配的磁盘号。这要求解决方案是批处理的(而不是Powershell)。

为此,我打算使用diskpart in scriptmode(建议elsewhere),它具有noerr 选项和状态

默认情况下,如果 DiskPart 在尝试执行脚本任务时遇到错误,DiskPart 会停止处理脚本并显示错误代码(除非您指定了 noerr 参数)。 ...

noerr 参数使您能够执行有用的任务,例如使用单个脚本删除所有磁盘上的所有分区,而不管磁盘总数。

multiple approaches 只是loop 覆盖所有可能的驱动器名称并多次调用diskpart

然而,正如here 所说,这会引入一些unpleasant overhead(以及每次之间必须等待15 秒)

您可以运行连续的 DiskPart 脚本,但您必须在每个脚本之间留出至少 15 秒的时间,以便在连续脚本中再次运行 DiskPart 命令之前完全关闭之前的执行

我的方法是完全忽略磁盘(因为selecting a volume 也是selects the appropriate disk)并遍历所有字母以生成diskpartscript.txt 之类的

for %%l 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 (
    echo select volume %%l >> diskpartscript.txt
    echo remove all noerr >> diskpartscript.txt
)

:: call diskpart.exe once with generated script file
diskpart.exe /s diskpartscript.txt

不幸的是,select volume 命令does not havenoerr 切换,因此脚本执行将在第一个不存在的卷之后停止。所以可能需要先找出所有现有的卷,然后只对它们进行操作。

所以我现在的问题是,如何通过一个 diskpart.exe 调用删除所有可能存在的磁盘上所有可能存在的驱动器号。

【问题讨论】:

    标签: batch-file disk-partitioning winpe


    【解决方案1】:

    作为一个想法,为什么不只为已安装的卷生成驱动器号,减去分配给 PE 磁盘的驱动器号,(当前驱动器)?这意味着您只使用现有卷。

    例子:

    @Echo Off
    SetLocal EnableDelayedExpansion
    Set "Ltrs="
    For /F "Delims=: " %%A In ('MountVol^|Find ":\"'
    ) Do If /I Not "%%A"=="%CD:~,1%" Set "Ltrs=%%A !Ltrs!"
    If Not Defined Ltrs Exit /B
    Rem Test
    For %%A In (%Ltrs%) Do Echo Select Volume %%A
    Pause
    

    【讨论】:

    • 我什至不知道MountVol,这比调用diskpart 并提取所有卷以仅使用现有卷再次调用diskpart 要优雅得多!发现!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多