此代码工作正常(将包含“center”的文件复制到c:\ temp:
dir %1 |FOR /f "tokens=5" %%G IN ('findstr "Center"') DO (
copy %1\%%G c:\temp\
)
但我想在循环后使用%% G var:
echo %%G
但是我看到的是%% G而不是文件名。 为什么呢?
答案 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%