我正在尝试从文件夹中批量获取文件。这是整个批处理文件:
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被扩展了,但第一个不扩展。我不明白为什么这个极其基础的单行批次不起作用。任何帮助表示赞赏。
如前所述here,您不能使用for
元变量作为for /R
的选项值。这是因为在扩展for
元变量之前,已读取并解析了这些选项。如for
中所述,if
命令以及rem
和this 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"