2009-04-06 15 views
4

私は起動可能なUFDからWinPE 2を起動しています.WIを見つける場所をImageXに伝えるためにドライブ文字を検出する必要があります。しかし、イメージングしているマシンによっては、マウントされたドライブが異なります。起動したUSBドライブのドライブ文字をスクリプトからどのように検出できますか?

UFDを一貫して、たとえばP:などにマウントする方法が必要です。マシンがブートされたドライブの文字を検出する方法や、startnet.cmdからアクセス可能な変数に自分のWIMファイルの場所を渡す方法がありますか?

ここでは、TechNetで同じ問題を抱えている人がいます。

http://social.technet.microsoft.com/Forums/en-US/itprovistadeployment/thread/3e8bb8db-a1c6-40be-b4b0-58093f4833be?prof=required#

答えて

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 

それがまったく役に立たないかどうかわかりません。

+0

このソリューションは、あなたがそれを提示した時点で明らかです。私はそれが正しい答えであることを意味します。しかし、これを実装するために朝まで待つ必要があります。ありがとう!! –

+0

これは偉大な作業を巻き上げる!再度、感謝します。 –

+0

最も簡単な解決策は、私が手伝ってくれてうれしいです。 – Tester101

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 
+0

このソリューションを使用して、別のパズルを上げた - このスクリプトが実行された最初の時間を、それが誤ってブートボリューム(Xを選択:, RAMディスク)をリムーバブルディスクとして使用します。スクリプトを再実行すると、正しいディスクが選択されます。将来の読者のためのメモ。 –

2

これはあまり一般的ではありませんが、「RAMドライブ起動」のWindows PE OSがブートされた基本ボリュームを特定する特定の方法があります。 Windows Advanced Installation Kit中のWindows PEのドキュメントから:

は、Windows PEが からブートどこのWindows 展開サービス、 への最善の方法を判断起動されていない場合は PEBootRamdiskSourceDriveレジストリキーの最初のチェックにあります。 存在しない場合は、正しいPEBootTypeのドライブ をスキャンし、 ブートドライブである を識別する何らかの種類のタグファイルを探します。

は(。問題のレジストリ値は、HKLM \ SYSTEM \ CURRENTCONTROLSET \コントロールの下に座っている)

関連する問題