为什么for循环中的变量值为空?

时间:2017-11-20 14:51:59

标签: windows batch-file

@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:\temp\printerCount.bat ^| findstr /B /E  "[0-9]*"') DO (

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

我在没有外部for循环的情况下显示输出正常:

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

1 个答案:

答案 0 :(得分:0)

delayed expansion的要点是,它不仅仅是一些咒语会自动改变从环境中提取变量的方式。这是一个扩展,当实际上,实际上提取!var!作为变量的当前值,而%var%在解析阶段由替换 - 变量的当前值,因此当循环运行并且更改var时它看起来没有变化。

IOW,

     ECHO today:%today%

应该是

     ECHO today:!today!

因为变量today的值在循环内发生了变化。遇到循环时,%today%将是today 的值

在您的情况下,today未定义,因此遇到循环时其值 nothing ,因此{em> nothing <{1}}将替换为 nothing 执行循环时。