1

このプロジェクトのコーディングを完了する前に、私は最後の挑戦に取り組んでいます。一時ファイルを使用せずに、diskpart の list partition コマンドと list volume コマンドからの出力をフィルター処理しようとしています。

私は解決策を持っています:

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

おそらく、for ループ内の 2 つのセット行を 1 つに結合する方法があり、おそらくループ内の 3 行すべてを 1 行に減らすこともできますが、私の試みはすべて失敗しました。

出力の例を次に示します。

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 ループ内の行を減らす方法に要約されます。

ご提案いただきありがとうございます。

4

2 に答える 2