有一些脚本可以查找最近附加的 VHD 的字母这里和这里。我使用以下代码从批处理脚本运行:
FOR /f usebackq %%a in (`powershell -c "GET-DISKIMAGE %VIRTUAL_MACHINE_PATH% | GET-DISK | GET-PARTITION | GET-VOLUME | Select-Object -ExpandProperty DriveLetter"`) DO SET VIRTUAL_DISK_LETTER=%%a
echo %VIRTUAL_DISK_LETTER%
但就我而言,我有一个 Windows 映像,在附加其虚拟驱动器后,我通常会有 2 个新卷:一个是大约 50Mb 的“Microsoft 保留分区”,另一个是包含 Windows 本身的系统分区。在所有情况下(我认为),“Microsoft 保留分区”都以字母开头,例如,F
系统分区排在第二位,例如驱动器H
。如何准确找到系统分区的字母?
更新:我想,唯一能做到我想做的就是检查卷的大小,这对我来说没问题。也许我需要类似的东西:
FOR /f usebackq %%a in (`powershell -c "GET-DISKIMAGE %VIRTUAL_MACHINE_PATH% | GET-DISK | GET-PARTITION | GET-VOLUME | Select-Object -ExpandProperty DriveLetter -ExpandProperty Size"`) DO (
if %%a.size > 100000000(
SET VIRTUAL_DISK_LETTER=%%a.letter
)
)
echo %VIRTUAL_DISK_LETTER%
我想,我会花很多时间做这件事,如果有人能帮助我,我会很感激。
答案1
我最终检查了Windows
分区上的文件夹:
for /f usebackq %%a in (`powershell -c "GET-DISKIMAGE %VIRTUAL_MACHINE_PATH% | GET-DISK | GET-PARTITION | GET-VOLUME | Select-Object -ExpandProperty DriveLetter"`) do (
if exist "%%a:\Windows\" (
set VIRTUAL_DISK_LETTER=%%a
)
)
if "%VIRTUAL_DISK_LETTER%"=="" (
echo Error! Couldn't find virtual disk letter.
exit /b -2
)