Batch file 我可以在循环之后使用循环迭代器吗?
此代码工作正常(将包含“center”的文件复制到c:\temp:Batch file 我可以在循环之后使用循环迭代器吗?,batch-file,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而不是文件名。 为什么?仅仅因为批处理文件语言是这样设计的。实际上,有许多语言不会将循环变量泄漏到循环范围之外(取决于它是如何声明的) 在循环中使用普通变量存储最后一个值: for %%G
dir %1 |FOR /f "tokens=5" %%G IN ('findstr "Center"') DO (
copy %1\%%G c:\temp\
)
但我想在循环后使用%%G var:
echo %%G
但是我看到的是%%G而不是文件名。
为什么?仅仅因为批处理文件语言是这样设计的。实际上,有许多语言不会将循环变量泄漏到循环范围之外(取决于它是如何声明的) 在循环中使用普通变量存储最后一个值:
for %%G in (something) do (
set "lastLoopValue=%%G"
)
echo %lastLoopValue%
顺便说一句,您发布的代码可以写在一行中,没有任何循环:copy%1\*Center*c:\temp\
如果您不介意通配符方法不区分大小写的话
附加说明:代码的固定版本:
@echo off
FOR /f "delims=" %%G IN ('dir %1 /b ^| findstr "Center"') DO (
copy "%~1\%%G" c:\temp\
set "lastLoopValue=%%G"
)
echo %lastLoopValue%
可能相关:我不确定你的管道是否可以这样工作;我会这样写:
for/F“tokens=5”%%%G in('dir/B“%%1”^ findstr“Center”)do
…是的,问题中的代码只是被破坏了。顺便说一句,“%%1”
相当于%1
。%1
可能包含也可能不包含双引号(取决于参数传递到脚本的方式);%~1
将始终删除周围的双引号;“%~1”
将始终包含周围的双引号,但避免使用双引号(与%1
相反)…@aschipfl,是的,这就是我的意思,%1
没问题。谢谢你的帮助,但它不起作用,输出是“回声关闭”这意味着%lastLoopValue%为空。如果您根据答案运行示例,那么输出当然将为空,因为您的计算机上没有名为某物的文件。当然不是,我使用了我的代码,文件被复制(在循环内)但是当它出来时,var是空的。@Ariel,请告诉我们你是如何尝试wOxxOm的答案的。@Ariel,你的代码被破坏了,我在答案中添加了一个固定版本。