windows - Hvorfor er værdien af ​​variabel tom i for sløjfe, der ikke virker?

Indlæg af Hanne Mølgaard Plasc

Problem



@ECHO OFF
setlocal EnableDelayedExpansion
set "SERVER[1]=server1.a.com"        
set "SERVER[2]=server2.b.com"   
set "SERVER[3]=server3.c.com"
FOR /L \%\%i IN (1,1,3) DO (

     FOR /F "delims=" \%\%j IN ('Psexec -s -c -f \\%\%SERVER[\%\%i]\%\% c:	empprinterCount.bat ^| findstr /B /E  "[0-9]*"') DO (

    set today=\%\%j
         ECHO today:\%today\%
    )
)


Jeg får output vist fint uden den ydre til sløjfe:


@ECHO OFF
setlocal EnableDelayedExpansion
FOR /F "delims=" \%\%i IN ('Psexec -s -c -f \server1.a.com c:	empprinterCount.bat ^| findstr /B /E  "[0-9]*"') DO set today=\%\%i
ECHO today:\%today\%
pause

Bedste reference


Punktet med delayed expansion er, at det ikke kun er en del incantation, som automatisk ændrer den måde, som variabler udvindes fra miljøet. Det er en udvidelse, som faktisk trækker !var! som nuværende -værdien af ​​variablen, mens \%var\% erstattes i parseringsfasen med variablen derefter -strømmen af ​​variablen, og det ser derfor ud til at være uændret, da løkkerne fungerer og ændrer var.


IOW,


     ECHO today:\%today\%


burde være


     ECHO today:!today!


da værdien af ​​variablen today ændres inden for sløjfen. \%today\% vil være værdien af ​​today når sløjfen blev ramt .


I dit tilfælde blev today ikke defineret, og har derfor en værdi på intet , når sløjfen blev fundet, så \%today\% erstattes af intet , når sløjfen udføres.