如何在批处理脚本中正确获取已挂载 VHD 的驱动器号

如何在批处理脚本中正确获取已挂载 VHD 的驱动器号

如何在脚本中正确获取已安装 VHD 的驱动器号。可能吗?

list volume
select volume <volume_number_of_attached_VHD>
assign letter=v
exit

在脚本的这一部分,需要指定卷的数量,该数量可能会随时变化。

另外,如果可以的话,我有一个想法,在早期阶段为该虚拟卷添加一些标签,然后在后期确定使用该标签搜索驱动器的卷数。这个想法可以实现吗?

谢谢。

答案1

万一您仍然关心,我想将这个问题发布到互联网上的某个地方,因为我刚刚弄清楚了这一点,并且之前还没有看到其他人回答过这个问题。

这将找到 DVD-ROM 并分配字母 v。

for /F "tokens=2" %%i in ('%comspec% /c echo list vol ^| diskpart ^| find "DVD-ROM"') do %comspec% /c echo select vol %%i ^& echo assign letter=v|diskpart

答案2

只是想理解并解释一下这个极客对我的问题的回答到底是怎么回事。

for ... in () do ... 是一个循环构造

/F 开关 - 循环遍历文本,标记=n - 指定从每行读取哪些编号项(默认值=1)为了简单起见:取原始字符串的第 n 列,用分隔符分隔(默认情况下为空格符号)

有关 /F 的更多信息: https://ss64.com/nt/for_f.html

%comspec% - 如果我没记错的话,它只是命令行解释器的名称 - 大多数情况下是“cmd”

我怀疑 ^| 和 ^& - 是一种管道……或者在 Linux 中与 || 和 && 对应的后续执行。如果我错了,请纠正我……

抱歉,手边没有窗户,没有机会检查,但提前接受答案,因为其他成员认为它很有用。

答案3

鉴于这个问题的年龄,(现在)强烈建议使用电源外壳执行这些操作。
但由于 OP 坚持使用 CMD,因此您必须从 CMD 运行对 Powershell 的适当调用。

做法是:

PowerShell -Command "(Get-DiskImage -ImagePath "C:\VHD\xxx.vhdx" | Get-Disk | Get-Partition | Get-Volume).DriveLetter"

对于 WSL 友好版本,请将 替换为\\\并记住将 包含powershell.exe在您的 PATH 中。

相关内容