このプロジェクトのコーディングを完了する前に、私は最後の挑戦に取り組んでいます。一時ファイルを使用せずに、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 ループ内の行を減らす方法に要約されます。
ご提案いただきありがとうございます。