2015-10-25 4 views
0

этот код работает отлично (копирует файл с "центром" в этом C: \ Temp:Могу ли я использовать итератор цикла после цикла?

dir %1 |FOR /f "tokens=5" %%G IN ('findstr "Center"') DO (
copy %1\%%G c:\temp\ 
) 

, но я хочу использовать %% G вар после цикла:

echo %%G 

но тогда то, что я вижу, это %% G, а не имя файла. Почему?

+5

Вероятно, связанный с: [как использовать переменную пакетный файл вне внутреннего цикла] (http://stackoverflow.com/questions/25495767/how-to-use-batch-file- variable-outside-inner-for-loop) – wOxxOm

+0

Я не уверен, что ваша труба может работать так: Я бы написал это как: 'for/F 'tokens = 5" %% G in (' dir/B "% ~ 1"^| findstr "Center" ') do' ... – aschipfl

+0

Да, код в вопрос просто сломан. Я думаю, BTW '"% ~ 1 "' эквивалентно '% 1'. – wOxxOm

ответ

0

Только потому, что язык командного файла разработан таким образом. На самом деле существует много языков, которые не вытесняют переменную цикла за пределы области цикл (в зависимости от того, как он был объявлен г).

Используйте обычную переменную внутри цикла для хранения последнего значения:

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% 
+0

Спасибо за помощь, но она не работает, выход «echo off», что означает, что% lastLoopValue% пуст. – Ariel

+0

Ну, если вы запустили пример из ответа, то, конечно, вывод будет пустым, потому что на вашем компьютере нет файла с именем 'something'. – wOxxOm

+0

, конечно, нет, я использовал свой код, и файл скопирован (внутри цикла), но когда он выходит, var пуст. – Ariel

Смежные вопросы