我有一个批处理脚本,它创建一些数组,以便在分区中存储一些关于磁盘空间的 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
在文件的顶部。