使用批处理脚本循环延迟扩展

时间:2017-10-10 08:59:40

标签: windows loops batch-file cmd delayedvariableexpansion

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

0 个答案:

没有答案