2014-09-14 8 views
1

사용자에게 명령 프롬프트에서 디스크의 문자와 레이블을 나열해야하는 WinPE 디스크에서 작업하고 있습니다. 불행하게도 WMIC logicaldisk ...은 내 WinPE 환경에서 오류를 발생시킵니다. 따라서 WMIC이 "복제하는"몇 줄의 배치를 조합했습니다. 다음과 같이 코드는 다음과 같습니다WMIC없이 볼륨 문자 및 볼륨 이름 반향

for /f "delims=" %%i in ('echo :') do set colon=%%i 
set drivetmp=%%a 
set driveletter=%drivetmp%%colon% 

echo Listing drives: 
for %%a in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do (
    fsutil fsinfo volumeinfo %driveletter% > tmpfile.t 
    find "Volume Name" tmpfile.t >nul && set /p %vname% =< tmpfile.t 
    find "Volume Name" tmpfile.t >nul && echo . Drive Letter: %driveletter% ..... %vname% 
    del /q tmpfile.t 
) 

코드 "작품"하지만, 모든 라인, 같은 %vname% 변수를 인쇄합니다. 내가 입력하면 예상대로

C:\>test.cmd 
Listing drives: 
. Volume Label: c: ..... Volume Name : Deployed Drive C 
. Volume Label: d: ..... Volume Name : Deployed Drive C 
. Volume Label: e: ..... Volume Name : Deployed Drive C 
. Volume Label: f: ..... Volume Name : Deployed Drive C 
. Volume Label: h: ..... Volume Name : Deployed Drive C 
. Volume Label: i: ..... Volume Name : Deployed Drive C 

예상대로 드라이브 문자 변경, 누락 된 드라이브를 제외하고, 예를 들어, 내 C : 드라이브가 Deployed Drive C 이름과 내가 드라이브 C, D, E, F, H and I이되고, 출력은 다음과 같이 될 것입니다 수동으로 명령, 그것도 작동합니다! 그러나, 내가 변수 %vname% 또는 %a%을 변경하는 경우, 스크립트는 여전히 동일한 작업을 수행합니다. 내가 놓친 부분이 눈에 띄게 명백한가요?

+1

신고 출력은 당신이 게시 한 코드와 관련이없는 것으로 보인다. 문제를 일으킬 가능성이있는 해결책은 블록 문 (괄호로 둘러싸인 일련의 명령문) 내에서 '% var %'를 사용하면 블록 전체가 구문 분석 될 때 (실행 전에 'var')의 값으로 대체된다는 것입니다. 루프의 작동을 통해 값이 변경 될 때,'delayedexpansion'을 호출하고'% var %'대신'! var!'을 사용해야합니다 ('delayedexpansion 'more info) – Magoo

답변

1

이 당신이 무엇을 필요 않는 경우 참조 :

@echo off 
echo Listing drives: 
for %%a in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do (
    if exist "%%a:\" (
     for /f "tokens=5,*" %%b in ('vol %%a: ^|find /i /v " serial number "') do echo Drive Letter: %%a:  Volume Name: %%c 
    ) 
) 
pause 
+0

정말 고마워요, 제가 게시 한 코드보다 훨씬 깨끗합니다. 그것은 완벽하게 작동합니다! – John