@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
答案 0 :(得分:0)
delayed expansion
的要点是,它不仅仅是一些咒语会自动改变从环境中提取变量的方式。这是一个扩展,当实际上,实际上提取!var!
作为变量的当前值,而%var%
在解析阶段由替换1} - 变量的当前值,因此当循环运行并且更改var
时它看起来没有变化。
IOW,
ECHO today:%today%
应该是
ECHO today:!today!
因为变量today
的值在循环内发生了变化。遇到循环时,%today%
将是today
的值。
在您的情况下,today
未定义,因此遇到循环时其值 nothing ,因此{em> nothing <{1}}将替换为 nothing 执行循环时。