变量'var'在显示其值之前是否被销毁?
@echo off
FOR /f "tokens=* delims=" %%G IN ('dir') DO (
set var=%%G
echo %var%
)
答案 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
执行时,正确设置时。