FOR DO语句中的局部变量

时间:2010-06-21 13:01:03

标签: windows batch-file

变量'var'在显示其值之前是否被销毁?

@echo off
FOR /f "tokens=* delims=" %%G IN ('dir') DO (
set var=%%G
echo %var%
)

2 个答案:

答案 0 :(得分:3)

这将永远不会有效,因为在解析循环体时会解析对%var%的引用。您必须启用延迟变量扩展并改为使用!var!

@ECHO OFF
SETLOCAL EnableDelayedExpansion
FOR /F "tokens=* delims= " %%G IN ('dir') DO (
    SET VAR=%%G
    ECHO !VAR!
)
ENDLOCAL

您可以在命令行中按类型SET /?阅读所有相关内容; - )

答案 1 :(得分:1)

您需要延迟扩展:

@setlocal enableextensions enabledelayedexpansion
@echo off
FOR /f "tokens=* delims=" %%G IN ('dir') DO (
    set var=%%G
    echo !var!
)
endlocal

它似乎不起作用的原因是因为在解析整个命令时评估%var%。该命令是{em>整个 for语句的四行。通过使用延迟扩展,您可以将!var!的评估推迟到实际echo执行时,正确设置时。