2016-07-03 8 views
1

나는이 프로젝트의 코딩을 마무리 짓기 전에 마지막으로 도전하고있다. 임시 파일을 사용하지 않고 diskpart의 목록 파티션에서 출력을 필터링하고 볼륨 명령을 나열하려고합니다.diskpart를 실행하고 임시 파일을 사용하지 않고 루프에서 출력을 처리하는 방법은 무엇입니까?

set /A hdd= 0 
rem Use this for the partition listing: 
set cmd="echo select disk %hdd%^&list partition| diskpart" 

rem and this for the volume listing (doesn't need the select disk): 
set cmd="echo select disk %hdd%^&echo list volume | diskpart" 

for /F "skip=7 usebackq delims=" %%? in (`!cmd!`) do (
    set line=%%? 
    set cut=!line:~0,8! 
    if NOT !cut!==DISKPART echo %%? 
) 

echo. 
pause 

아마 하나로 루프, 심지어 한 줄에 루프 내부의 모든 3 개 라인을 줄이려면 내부의 2 개 세트 라인을 결합하는 방법이 있지만, 모든 :

나는 해결책을 가지고 있습니다 내 시도는 실패했다.

Partition ### Type    Size  Offset 
------------- ---------------- ------- ------- 
Partition 1 Primary   1000 MB 1024 KB 
Partition 2 Primary    78 GB 1001 MB 
Partition 0 Extended   29 GB 79 GB 

또는 볼륨 목록은 : 여기

출력이 어떻게 생겼는지의 예입니다
Volume ### Ltr Label  Fs  Type  Size  Status  Info 
---------- --- ----------- ----- ---------- ------- --------- ------ 
Volume 0  B      DVD-ROM   0 B No Media 
Volume 1  D      DVD-ROM   0 B No Media 
Volume 2  C Windows 7 U NTFS Partition  78 GB Healthy System 

개념적 할 수있는 충분히 간단한 일처럼 보인다, 그러나 아주 작은 그건 거기 배치의 수많은 구문상의 단점에 대해 간단합니다!

이 질문은 for 루프 내에서 줄을 줄이는 방법에 대한 것입니다.

의견을 보내 주셔서 감사합니다.

답변

1

다음 스크립트는 다른 접근법을 보여줍니다. for /F 루프 변수 %%?을 등호 (=%%?=)로 묶어 표시하면 diskpart 출력이 상당히 포함됩니다. 선행 및 후행 공백 :

@ECHO OFF 
SETLOCAL EnableExtensions DisableDelayedExpansion 
set "cmd=echo list disk | diskpart" 
call :listCmd 
call :listPar "echo list disk | diskpart" 
call :listPar "echo list volume | diskpart" 
call :listPar "(echo select disk 1 & echo list partition) | diskpart" 
ENDLOCAL 
goto :eof 

:listCmd 
echo %~0 %* 
for /F "skip=7 usebackq delims=" %%? in (`"%cmd%"`) do (
    if "%%?" NEQ "DISKPART> " echo(=%%?= 
) 
goto :eof 

:listPar 
echo %~0 %* 
for /F "skip=7 usebackq delims=" %%? in (`"%~1"`) do (
    if "%%?" NEQ "DISKPART> " echo(=%%?= 
) 
goto :eof 

출력

==> D:\bat\SO\38166597.bat 
:listCmd 
= Disk ### Status   Size  Free  Dyn Gpt= 
= -------- ------------- ------- ------- --- ---= 
= Disk 0 Online   931 GB  0 B   = 
= Disk 1 Online   111 GB  0 B   = 
= Disk 2 Online   465 GB 1024 KB   = 
:listPar "echo list disk | diskpart" 
= Disk ### Status   Size  Free  Dyn Gpt= 
= -------- ------------- ------- ------- --- ---= 
= Disk 0 Online   931 GB  0 B   = 
= Disk 1 Online   111 GB  0 B   = 
= Disk 2 Online   465 GB 1024 KB   = 
:listPar "echo list volume | diskpart" 
= Volume ### Ltr Label  Fs  Type  Size  Status  Info= 
= ---------- --- ----------- ----- ---------- ------- --------- --------= 
= Volume 0  E      DVD-ROM   0 B No Media   = 
= Volume 1  D DataDisk  NTFS Partition 931 GB Healthy Pagefile= 
= Volume 2   Rezervováno NTFS Partition 350 MB Healthy System = 
= Volume 3  C    NTFS Partition 111 GB Healthy Boot = 
= Volume 4  F GOG   FAT32 Partition 465 GB Healthy   = 
:listPar "(echo select disk 1 & echo list partition) | diskpart" 
=Disk 1 is now the selected disk.= 
= Partition ### Type    Size  Offset= 
= ------------- ---------------- ------- -------= 
= Partition 1 Primary   350 MB 1024 KB= 
= Partition 2 Primary   111 GB 351 MB= 

==>