我有一个批处理脚本,它创建了一些数组,以便存储一些关于分区中磁盘空间的WMI数据,然后我想循环。我试图利用延迟扩张的方式似乎存在一些问题。
首先,我为分区名称,可用空间和总空间创建了3个数组,如下所示:
SET i=0
SET j=0
SET k=0
FOR /F "tokens=1,2 delims== usebackq" %%A IN (`WMIC %remoteaccess% Path Win32_PerfRawData_PerfDisk_LogicalDisk Get Name^,FreeMegabytes^,PercentFreeSpace_Base /VALUE`) DO (
IF /I %%A EQU Name SET "names[!i!]=%%B"
IF /I %%A EQU Name SET /a i=i+1
IF /I %%A EQU FreeMegabytes SET "dfm[!j!]=%%B"
IF /I %%A EQU FreeMegabytes SET /a j=j+1
IF /I %%A EQU PercentFreeSpace_Base SET "dfb[!k!]=%%B"
IF /I %%A EQU PercentFreeSpace_Base SET /a k=k+1
)
这很好用。但是后来我试图将它显示为XML,使用循环遍历每个(%calcaddress%
是计算器批处理文件的链接):
SET l=0
FOR /F "tokens=2 delims==" %%s in ('set names[') DO (
ECHO ^<result^>
ECHO <title>%%s Disk Free^<title>
FOR /F "tokens=* usebackq" %%A IN (`"%calcaddress% round0 !dfm[%l%]!*1024*1024"`) DO ECHO ^<Value^>%%A^</Value^>
ECHO ^</result^>
SET /a l=l+1
)
问题在于,%l%
的值在每次迭代时似乎总是0
,所以它不起作用。我尝试将其更改为!dfm[!l!]!
,可能还有所有版本,但我无法工作。我的文件顶部也有ECHO off
和SETLOCAL EnableDelayedExpansion
。