我从可启动的UFD启动WinPE 2,我需要检测驱动器号以告诉ImageX在哪里可以找到WIM。但是,根据我正在成像的机器,有不同的安装驱动器。
我需要一种方法来持续将UFD安装在P:或其他东西上。有没有办法检测启动计算机的驱动器的字母,或者将我的WIM文件的位置传递给可从startnet.cmd访问的变量的其他方法?
以下是其他在TechNet上遇到同样问题的人。
答案 0 :(得分:3)
此VBScript将显示每个可移动驱动器的消息(字母:说明),可以轻松修改以搜索特定驱动器并返回该字母。
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colDisks = objWMIService.ExecQuery("Select * from Win32_LogicalDisk where MediaType = 11")
For Each objDisk in colDisks
Wscript.Echo objDisk.DeviceID & objDisk.Description
Next
不知道这是否有帮助。
答案 1 :(得分:2)
这是一个不太通用的解决方案,而不是这里提到的其他解决方案,但似乎有一种特定的方法可以确定从哪个基础卷启动“RAM-drive-booted”Windows PE OS。从Windows Advanced Installation Kit中的Windows PE文档:
如果您没有启动Windows 部署服务,最好的方法 确定Windows PE从哪里启动 是先检查一下 PEBootRamdiskSourceDrive注册表项。 如果不存在,请扫描驱动器 正确的PEBootType并寻找 某种标识的标记文件 启动驱动器。
(有问题的注册表值位于HKLM \ SYSTEM \ CurrentControlSet \ Control下。)
答案 2 :(得分:0)
这是一个非最佳解决方案。在这种情况下,UFD必须具有特定的名称,该名称将传递给脚本,该脚本搜索每个可能的驱动器号以进行匹配。依赖所有具有相同名称的闪存驱动器可能不切实际。
仍希望有人能更好地回答!
setlocal
:: Initial variables
set TMPFILE=%~dp0getdrive.tmp
set driveletters=abcdefghijklmnopqrstuvwxyz
set MatchLabel_res=
for /L %%g in (2,1,25) do call :MatchLabel %%g %*
if not "%MatchLabel_res%"=="" echo %MatchLabel_res%
goto :END
:: Function to match a label with a drive letter.
::
:: The first parameter is an integer from 1..26 that needs to be
:: converted in a letter. It is easier looping on a number
:: than looping on letters.
::
:: The second parameter is the volume name passed-on to the script
:MatchLabel
:: result already found, just do nothing
:: (necessary because there is no break for for loops)
if not "%MatchLabel_res%"=="" goto :eof
:: get the proper drive letter
call set dl=%%driveletters:~%1,1%%
:: strip-off the " in the volume name to be able to add them again further
set volname=%2
set volname=%volname:"=%
:: get the volume information on that disk
vol %dl%: > "%TMPFILE%" 2>&1
:: Drive/Volume does not exist, just quit
if not "%ERRORLEVEL%"=="0" goto :eof
set found=0
for /F "usebackq tokens=3 delims=:" %%g in (`find /C /I "%volname%" "%TMPFILE%"`) do set found=%%g
:: trick to stip any whitespaces
set /A found=%found% + 0
if not "%found%"=="0" set MatchLabel_res=%dl%:
goto :eof
:END
if exist "%TMPFILE%" del "%TMPFILE%"
endlocal
答案 3 :(得分:0)
为了更详细地阐述鲁本的回答,这是我的批处理文件:
wpeutil UpdateBootInfo
for /f "usebackq skip=1 tokens=3 delims= " %%l in ( `reg query HKLM\System\CurrentControlSet\Control /v PEBootRAMDiskSourceDrive` ) do set "PendrivePath=%%l"
set "PendriveLetter=%PendrivePath:~0,1%"
echo The boot pendrive's drive letter is %PendriveLetter%