在结束这个项目的编码之前,我正在接受最后一个挑战。我正在尝试在不使用临时文件的情况下过滤来自 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
可能有一种方法可以将 for 循环内的 2 行组合为一个,甚至可以将循环内的所有 3 行减少为一行,但我所有的尝试都失败了。
以下是输出的示例:
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 循环中的行数。
感谢您提出的任何建议。