Локальная переменная в операторе FOR DO - PullRequest
0 голосов
/ 21 июня 2010

уничтожается ли переменная 'var' перед отображением ее значения?

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

Ответы [ 2 ]

3 голосов
/ 21 июня 2010

Это никогда не будет работать, так как ссылка на %var% разрешается, когда тело цикла анализируется.Вы должны включить отложенное расширение переменной и использовать !var! вместо этого:

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

Вы можете прочитать все об этом, набрав SET /? в командной строке; -)

1 голос
/ 21 июня 2010

Требуется отложенное расширение:

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

Причина, по которой он не работает, заключается в том, что %var% вычисляется во время анализа всей команды.Команда является целыми четырьмя строками оператора for.Используя отложенное расширение, вы откладываете оценку !var! до момента, когда выполняется фактическое echo, когда оно установлено правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...