Windows PE 3.0 检测从哪个设备启动

Windows PE 3.0 检测从哪个设备启动

我正在使用 Windows PE 3.0 创建自定义启动盘。我需要能够知道系统是从哪个驱动器启动的。它可能是 CD,也可能是 USB 闪存驱动器。过去,我曾在驱动器的根目录中查找包含我们一些自定义配置的文件。然而,这有点混乱。

基本上,除了 Windows PE 之外,驱动器或磁盘还具有其他脚本和工具。我需要将该 USB 驱动器或 DVD 重新安装到 U:\ Drive,以保持一致。

基本上,

Diskpart.exe
Select Volume $X
assign Letter=U
Exit

我只需要弄清楚如何确定那个讨厌的小$X。

答案1

在我争论这是否属于这里或堆栈溢出,我找到了一个很好的答案在 StackOverflow 上(从未被标记为答案,但它对我来说非常有效!

现在,我扫描一堆驱动器号,查找配置文件,这将大大缩短代码!基本上,在 PE 中查询注册表中的 HKLM\SYSTEM\CurrentControlSet\Control\PERamDiskSourceDrive

我想我也会在这里回答所有问题,以便其他在互联网上搜索的人可以更好地找到它。

编辑:对于那些搜索相同内容的人,我将其添加到 Windows PE 中的 windows\system32 中的 startnet.cmd 中:

REM Get Boot Drive from WinPE Registry
for /f "tokens=2,*" %%a in ('reg query HKLM\system\currentcontrolset\control /v PEBootRamDiskSourceDrive ^| find /i "PEBootRamDiskSourceDrive"') do set driveLtr=%%b 
REM Setup text file on ram drive to pass to diskpart commands
SET MountScript=X:\MountScript.TXT
ECHO SELECT VOLUME %driveLtr% > %MountSCRIPT%
ECHO assign letter=U noerr >> %MountSCRIPT%
DISKPART /S %MountSCRIPT%
REM Don't really need to cleanup, since its a ramdisk, but trying to be nice
DEL %MountSCRIPT%

答案2

或者,您可以执行以下操作:

:: Is 'C' assigned to the boot drive?
if EXIST c:\windows\system32\startnet.cmd (
    echo select volume c > x:\reassignUSB.txt
    echo assign letter=d >> x:\reassignUSB.txt
    echo|set /p=Reassigning USB letter...& diskpart /s x:\reassignUSB.txt >nul
)

相关内容