因为我正在寻找一个程序化的答案,所以我把这个问题贴在 SO 上,尽管它的边界正如人们可以在这个相关和迁移的问题上看到的那样。
我正在尝试自动删除启动到 Windows PE 的系统中的所有分配的磁盘号。这要求解决方案是批处理的(而不是Powershell)。
为此,我打算在脚本模式中使用diskpart (如其他地方所建议的那样),它具有noerr
选项和状态
默认情况下,如果 DiskPart 在尝试执行脚本任务时遇到错误,DiskPart 将停止处理脚本并显示错误代码(除非您指定了 noerr 参数)。...
noerr 参数使您能够执行有用的任务,例如使用单个脚本删除所有磁盘上的所有分区,而不考虑磁盘总数。
有多种 方法可以遍历所有可能的驱动器名称并diskpart
多次调用。
然而,这会带来一些令人不快的开销(以及每次之间必须等待 15 秒),正如这里所说
您可以运行连续的 DiskPart 脚本,但在连续脚本中再次运行 DiskPart 命令之前,必须在每个脚本之间留出至少 15 秒的时间才能完全关闭先前的执行
我的方法是完全忽略磁盘(因为选择一个卷也会选择适当的磁盘)并遍历所有字母以生成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
没有开关noerr
,因此脚本执行将在第一个不存在的卷之后停止。所以可能需要先找出所有现有的卷,然后只对它们进行操作。
所以我现在的问题是,如何通过一次diskpart.exe
调用删除所有可能存在的磁盘上的所有可能存在的驱动器号。