Frage

Ich bin starten WinPE 2 von einer bootfähigen UFD, und ich brauche die Laufwerksbuchstabe zu erkennen, um ImageX zu sagen, wo die WIM zu finden. Doch auf der Maschine Imaging Ich bin abhängig, gibt es verschiedene Laufwerke montiert ist.

ich brauche einen Weg, um konsequent die UFD zu montieren, sagen wir, P: oder so etwas. Gibt es eine Möglichkeit, die Buchstaben des Laufwerks zu erkennen, von dem die Maschine gestartet wird, oder ein andere Art und Weise die Position meiner WIM-Datei auf eine Variable zugänglich von startnet.cmd passieren?

Hier ist jemand anderes mit dem gleichen Problem über auf TechNet.

Andere Tipps

Es ist eine weniger generische Lösung als die anderen hier erwähnten, aber es scheint eine bestimmte Art und Weise zu sein, die darunter liegende Volumen ein „RAM-Laufwerk gebootet“ Windows PE OS aus gestartet wurde, um zu bestimmen. Aus der Dokumentation zu Windows PE in der Erweiterte Windows-Installation Kit :

  

Wenn Sie Windows nicht booten   Deployment Service, der beste Weg zu   bestimmen, wo Windows PE gebootet aus   ist zum ersten Scheck für   PEBootRamdiskSourceDrive Registrierungsschlüssel.   Wenn es nicht vorhanden ist, scannen die Laufwerke   des richtigen PEBootType und sucht   eine Art Tag-Datei, die angibt,   das Boot-Laufwerk.

(Der Registrierungswert in Frage sitzt unter HKLM \ SYSTEM \ CurrentControlSet \ Control.)

Hier ist eine nicht-optimale Lösung. In diesem Fall hat der UFD einen bestimmten Namen haben, die an das Skript übergeben wird, die alle möglichen Laufwerksbuchstaben für ein Spiel sucht. Es ist wahrscheinlich nicht praktisch auf den Flash-Laufwerken alle mit dem gleichen Namen zu verlassen.

Immer noch Hoffnung, jemand knallt durch eine bessere Antwort!

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top