Question

Je lance WinPE 2 à partir d'un lecteur flash USB bootable, et je dois détecter la lettre de lecteur afin de dire ImageX où trouver le WIM. Toutefois, en fonction de la machine que je suis l'imagerie, il existe différents lecteurs montés.

Je besoin d'un moyen de monter constamment l'UFD, disons, P: ou quelque chose. Y at-il un moyen de détecter la lettre du lecteur à partir de laquelle la machine a été démarré, ou d'une autre façon de passer l'emplacement de mon fichier WIM à une variable accessible à partir startnet.cmd?

Voici quelqu'un d'autre avec la même question sur au TechNet.

Autres conseils

Il est une solution moins générique que les autres mentionnés ici, mais il semble y avoir une manière spécifique pour déterminer quel volume sous-jacente « RAM-drive-botté » Windows PE OS a été démarré à partir. De la documentation sur Windows PE dans le windows Advanced Installation Kit :

  

Si vous n'êtes pas le démarrage de Windows   Services de déploiement, la meilleure façon de   déterminer où Windows PE démarré à partir   est d'abord pour vérifier   clé de Registre PEBootRamdiskSourceDrive.   Si ce n'est pas présent, analyser les disques   du PEBootType correct et rechercher   une sorte de fichier d'étiquette qui identifie   l'unité d'amorçage.

(La valeur de Registre en question se trouve sous HKLM \ SYSTEM \ CurrentControlSet \ Control.)

Voici une solution non optimale. Dans ce cas, l'UFD doit avoir un nom spécifique, qui est passé au script qui recherche chaque lettre de lecteur possible pour un match. Il est probablement pas pratique de compter sur les lecteurs flash ayant tous le même nom.

Espérant toujours quelqu'un saute par une meilleure réponse!

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top