【发布时间】: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 have 和noerr 切换,因此脚本执行将在第一个不存在的卷之后停止。所以可能需要先找出所有现有的卷,然后只对它们进行操作。
所以我现在的问题是,如何通过一个 diskpart.exe 调用删除所有可能存在的磁盘上所有可能存在的驱动器号。
【问题讨论】:
标签: batch-file disk-partitioning winpe