Только потому, что язык командного файла разработан таким образом. На самом деле существует много языков, которые не вытесняют переменную цикла за пределы области цикл (в зависимости от того, как он был объявлен г).
Используйте обычную переменную внутри цикла для хранения последнего значения:
for %%G in (something) do (
set "lastLoopValue=%%G"
)
echo %lastLoopValue%
BTW код Вы разместили можно записать в одной строке без петель:
copy %1\*Center* c:\temp\
, если вы не возражаете нечувствительность к случаю подстановочного подхода.
P.S. Фиксированная версия коды:
@echo off
FOR /f "delims=" %%G IN ('dir %1 /b ^| findstr "Center"') DO (
copy "%~1\%%G" c:\temp\
set "lastLoopValue=%%G"
)
echo %lastLoopValue%
Вероятно, связанный с: [как использовать переменную пакетный файл вне внутреннего цикла] (http://stackoverflow.com/questions/25495767/how-to-use-batch-file- variable-outside-inner-for-loop) – wOxxOm
Я не уверен, что ваша труба может работать так: Я бы написал это как: 'for/F 'tokens = 5" %% G in (' dir/B "% ~ 1"^| findstr "Center" ') do' ... – aschipfl
Да, код в вопрос просто сломан. Я думаю, BTW '"% ~ 1 "' эквивалентно '% 1'. – wOxxOm