You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取最近挂载的VHD中系统分区的盘符

如何获取最近挂载的VHD中系统分区的盘符

我懂你的困扰——挂载Windows镜像的VHD后,总会先出现那个50MB左右的微软保留分区,抢了第一个盘符,而你真正需要的是后面那个装着系统的大分区盘符。用分区大小筛选确实是个可行的思路,不过你写的代码还需要调整下,我帮你优化得更准确好用:

方法一:通过分区大小筛选(简单直接)

直接在PowerShell环节就把小分区过滤掉,不用在批处理循环里做判断,效率更高也更不容易出错:

FOR /f "usebackq tokens=*" %%a in (`powershell -c "GET-DISKIMAGE %VIRTUAL_MACHINE_PATH% | GET-DISK | GET-PARTITION | GET-VOLUME | Where-Object { $_.Size -gt 1GB } | Select-Object -ExpandProperty DriveLetter"`) DO SET VIRTUAL_DISK_LETTER=%%a
echo %VIRTUAL_DISK_LETTER%
  • 这里用Where-Object { $_.Size -gt 1GB }直接筛掉小于1GB的分区,毕竟微软保留分区只有50MB左右,系统分区肯定远大于这个值
  • 加上tokens=*是为了避免盘符前后的空格影响变量赋值
  • 如果你觉得1GB的阈值不合适,可以改成500MB或者具体字节数,PowerShell支持KB、MB、GB、TB这些单位缩写

方法二:通过系统文件夹判断(更精准)

如果担心分区大小判断可能误判(比如某些精简系统分区比较小),可以直接检查分区里是否有Windows文件夹,这个方法更稳妥:

FOR /f "usebackq tokens=*" %%a in (`powershell -c "GET-DISKIMAGE %VIRTUAL_MACHINE_PATH% | GET-DISK | GET-PARTITION | GET-VOLUME | ForEach-Object { if (Test-Path (Join-Path $_.DriveLetter ':' '\Windows')) { $_.DriveLetter } }"`) DO SET VIRTUAL_DISK_LETTER=%%a
echo %VIRTUAL_DISK_LETTER%

这个逻辑会遍历所有挂载的分区,找到包含\Windows文件夹的那个,直接返回它的盘符,完全不会错判。

备注:内容来源于stack exchange,提问作者qloq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 10:54:31