嵌套执行两次批处理

时间:2018-05-15 12:05:00

标签: batch-file for-loop nested-loops variable-expansion

我的批处理脚本中有以下代码:

for %%m in (a b c) do (
    cd %%m
    dir
    for %%f in (*.zip) do rename "%%f" "%%m_%%f"
    dir
    cd ..
)

应该将文件所在文件夹的名称添加到文件名中。我是通过运行嵌套for循环来实现的。

然而,当我运行脚本时,我得到以下输出(缩短,对于a,b,c的每个变体):

05/15/2018  04:45 AM         5,213,422 build_1.0.0.zip
05/15/2018  04:45 AM         5,213,422 a_a_build_1.0.0.zip

因此无论出于何种原因,重命名每个文件执行两次,第二次执行已重命名的文件。启用回声后,我们实际上可以看到发生这种情况:

C:\project>for %m in (a b c) do (
 cd %m     
 dir 
 for %f in (*.zip) do rename "%f" "%m_%f"  
 dir 
 cd .. 
)

...

C:\project>rename "build_1.0.0.zip" "a_build_1.0.0" 
C:\project>rename "a_build_1.0.0" "A_a_build_1.0.0" 

为什么会发生这种情况,以及如何解决(我希望保留嵌套循环,如果可能的话,因为脚本通常会更长一点 - 但即使这个缩短的版本也显示出这种奇怪的行为)

0 个答案:

没有答案