2014-11-15 2 views
1

레이블로 DISKPART를 사용하여 WinPE에서 디스크를 선택해야합니다. 나는이를 찾았지만 나는 그것이 오래된 생각 : 나는 그것을 실행하면diskpart 디스크 레이블로 선택

@Echo %dbg%Off 
:: 
:: Find External drive and set it active 
:: Lists Disk Information using Diskpart 
:: 
SetLocal EnableDelayedExpansion 
:: Type the frst 11 characters of the label of the drive here. 
Set _FindLabel=Recovery 
Call :_InitVars "%_FindLabel%" 
"%SystemRoot%\system32\FSUTIL.exe">Nul 2>&1||Goto _NotAdmin 
Echo. 
Echo.Please wait, gathering info on the installed drives 
Echo. 
>"%_Dscr1%" Echo.List disk 
For /F "Tokens=2" %%I In ('Diskpart /S "%_Dscr1%"^|Findstr /I /R /C:"Disk [0-9]"') Do (
(Echo.Select Disk %%I 
Echo.Detail Disk)>>"%_OFile1%" 
) 
For /F "Tokens=1,2,3*" %%I In ('Diskpart /S "%_OFile1%"^|Findstr /I /R /C:"Disk    [0-9]" /C:"Volume [0-9]"') Do (
    If /I %%I==Disk (
Set _Tmp=%%J: 
) Else (
Set _Label=%%L 
Set _Label=!_Label:~,11! 
>>"%_OFile2%" Echo.!_Tmp!%%J:!_Label! 
)) 
If Exist "%_OFile1%" Del "%_OFile1%" 
For /F "Usebackq Tokens=1-3 Delims=:" %%I In ("%_OFile2%") Do (
Set _Label=%%K 
Set _Label=!_Label:~,11! 
If "!_Label!"=="%_FindLabel%" (Set _Disk=%%I) & (Set _Label=%%K) & Goto _FDisk 
>>"%_OFile1%" Echo.Volume %%J on Disk %%I has the Label %%K 
) 
Echo. 
Echo.There is no drive connected that has the label of "%_FindLabel%" 
Echo.These are the currently connected volumes: 
Type "%_OFile1%" 
:_Exit 
Echo. 
Pause 
Goto _Cleanup 
:_FDisk 
(Echo.Select disk %_Disk% 
Echo.Select Partition 1 
Echo.Active)>"%_Dscr1%" 
Diskpart /S "%_Dscr1%" 
:_Cleanup 
For %%I In ("%_Dscr1%" "%_OFile1%" "%_OFile2%") Do Del %%I>Nul 2>&1 
Goto :EOF 
:::::::::::::::::::::::::::::::::::::::::::::::::::::: 
::   Subroutines 
:::::::::::::::::::::::::::::::::::::::::::::::::::::: 
:_NotAdmin 
Ver|Findstr /I /C:"Version 5">Nul 
If %Errorlevel%==0 (Set _Tmp1=5) & (Set _Tmp=a Computer Administrator account) 
Ver|Findstr /I /C:"Version 6">Nul 
If %Errorlevel%==0 (Set _Tmp1=6) & (Set _Tmp=an Elevated Command Prompt) 
Echo. 
Echo.This program must be run from %_Tmp%. 
If %_Tmp1%==6 Echo.Please Right click the file, then click Run as Administrator 
Echo.Exiting program 
Goto _Exit 
:_InitVars 
For /F "Tokens=1 Delims==" %%I In ('Set _ 2^>Nul') Do Set %%I= 
Set _Dscr1=%temp%\dpscr1.txt 
Set _OFile1=%temp%\_OFile1.txt 
Set _OFile2=%temp%\_OFile2.txt 
Set _FindLabel=%~1 
Set _FindLabel=%_FindLabel:~,20% 
Call :_Cleanup 

, 그것은 반환

Please wait, gathering info on the installed drives 

There is no drive connected that has the label of "Recovery" 
These are the currently connected volumes: 
Volume 1 on Disk 0 has the Label NTFS Part 
Volume 2 on Disk 0 has the Label NTFS Part 
Volume 3 on Disk 1 has the Label WINPE 

는 그것은 Fs를 (파일 시스템)이 아닌 레이블을 보여주는 것.

Diskpart는 출력 (리스트 볼륨)

Volume ### Ltr Label  Fs  Type  Size  Status  Info 
---------- --- ----------- ----- ---------- ------- --------- -------- 
Volume 0  D USBBOOT  UDF DVD-ROM  329 MB Healthy 
Volume 1   Windows  NTFS Partition  40 GB Healthy 
Volume 2   Recovery  NTFS Partition  19 GB Healthy 
Volume 3  Z WINPE  FAT32 Removable 7632 MB Healthy 

는 라벨 열을 선택 얻을이를 수정하는 방법을 잘하지 않습니다. 입력하여 Diskpart 출력의 일부 라인에서 유효한 드라이브 문자 (list volume, 열 ltr)를없는 존재하므로 다음과 같이

답변

1

는 다음 라인 # 19

For /F "Tokens=1,2,3*" %%I In ('Diskpart /S "%_OFile1%"^|Findstr /I /R /C:"Disk [0-9]" /C:"Volume [0-9]"') Do (

표시 토큰 (그리고 우리는 지금 우리의 범인이) :

For /F "Tokens=1*" %%I In ('Diskpart /S "%_OFile1%"^|Findstr /I /R /C:"Disk [0-9]" /C:"Volume [0-9]"') Do (
    If /I %%I==Disk (
    Set _Tmp=%%J: 
) Else (
    Set _Label=%%J 
    Set _Label=!_Label:~10,11! 
>>"%_OFile2%" Echo.!_Tmp!%%J:!_Label! 
)) 
:

%%I %%J %%K  %%L 
Volume 0 D  USBBOOT  UDF DVD-ROM  329 MB ... 
Volume 1 Windows NTFS Partition  40 GB Healthy 
Volume 2 Recovery NTFS Partition  19 GB Healthy 
Volume 3 Z  WINPE  FAT32 Removable 7632 MB ... 

따라서 당신은 당신의 스크립트 (대신 라인 19..26의) 다음 코드 조각을 사용할 수 있습니다

케어이 변경은 _Tmp 변수를 간섭합니다.

관련 문제