我的批处理脚本中有以下代码:
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"
为什么会发生这种情况,以及如何解决(我希望保留嵌套循环,如果可能的话,因为脚本通常会更长一点 - 但即使这个缩短的版本也显示出这种奇怪的行为)