windows - Forsinket udvidelse med batch script loops

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har et batch script, der skaber nogle arrays for at gemme nogle WMI data vedrørende diskplads i partitioner, som jeg så vil gå igennem. Det ser ud til, at der er noget problem med den måde, jeg forsøger at udnytte forsinket ekspansion.


Først og fremmest skabte jeg 3 arrays for partitionsnavn, ledig plads og totalt rum som dette:


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
)


Det virker fint. Men senere forsøger jeg at vise det som XML, ved hjælp af en sløjfe til at gå igennem hver som sådan (\%calcaddress\% er et link til en kalkulatorbatchfil):


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
)


Problemet er her, at værdien af ​​\%l\% altid synes at være 0 på hver iteration, så det virker ikke. Jeg forsøgte at skifte det til !dfm[!l!]! og sandsynligvis alle variationer, men jeg kan 'Få noget til at arbejde. Jeg har også ECHO off og SETLOCAL EnableDelayedExpansion øverst i filen.

Bedste reference