我可以在循环后使用循环迭代器吗?

时间:2015-10-25 17:56:43

标签: batch-file

此代码工作正常(将包含“center”的文件复制到c:\ temp:

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

但我想在循环后使用%% G var:

echo %%G

但是我看到的是%% G而不是文件名。 为什么呢?

1 个答案:

答案 0 :(得分:0)

仅仅因为批处理文件语言是这样设计的。实际上有很多语言不会将循环变量泄漏到循环范围之外(取决于它的声明方式)。

在循环内使用普通变量来存储最后一个值:

for %%G in (something) do (
    set "lastLoopValue=%%G"
)
echo %lastLoopValue%

顺便说一句,你发布的代码可以写成一行,没有任何循环:
 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%