循环%% i的批处理未扩展

问题描述 投票:0回答:1

我正在尝试从文件夹中批量获取文件。这是整个批处理文件:

for %%i in (folder) do echo (for /r "%%~i" %%j in (*.png) do echo %%~i-%%j)

代码按预期执行,并输出到控制台:

(for /r "folder" %j in (*.png) do echo folder-%j)

如果我复制此文件并将其按原样粘贴到cmd的同一路径中,则它会回显我的文件。

但是如果我从批处理中删除第一个回显,则会输出:

(for /R "%~i" %j in (*.png) do echo folder-%j )

请注意,它不会执行for循环,第二个%% i被扩展了,但第一个不扩展。我不明白为什么这个极其基础的单行批次不起作用。任何帮助表示赞赏。

batch-file
1个回答
0
投票

如前所述here,您不能使用for元变量作为for /R的选项值。这是因为在扩展for元变量之前,已读取并解析了这些选项。如for中所述,if命令以及remthis post命令比其他命令更早被识别。 for元变量和延迟扩展都在以后扩展,因此在解析这些命令时将按字面意义读取它们。

作为一种解决方法,将内部for /R循环放入子例程,由call进行调用,并使用诸如%~1之类的参数引用来传递外部for循环的当前值:

for %%i in ("folder") do call :SUB "%%~i"
goto :EOF

:SUB
for /R "%~1" %%j in ("*.png") do echo "%~1"-"%%~j"
© www.soinside.com 2019 - 2024. All rights reserved.