batch-file - 嵌套用于批量执行两次
问题描述
我的批处理脚本中有以下代码:
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
因此,无论出于何种原因,每个文件都会执行两次重命名,第二次是在已重命名的文件上执行。启用 echo 后,我们实际上可以看到这种情况发生:
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"
为什么会发生这种情况,以及如何解决它(如果可能,我宁愿保留嵌套循环,因为脚本通常会更长一些 - 但即使是这个缩短的版本也会显示这种奇怪的行为)
解决方案
推荐阅读
- postgresql - 从源代码编译 postgresql
- c - gcc 错误消息:程序中出现杂散“\ XXX”
- c++ - 使用 libcurl、C++ 时 POST 请求失败
- qt - 如何将 (0,0) 设置为 QGraphicsScene 的左上角
- c - 如何使用 msgsend 将文件描述符发送到子进程?
- python - 如何使用模算子处理周期性边界条件?
- r - 如果在查找表中找到较长字符串中的单词/短语,则替换它们
- c# - 加载资源失败:服务器响应状态为 404 ()
- sql - SQL空日期比较
- ruby-on-rails - 如何在 Rails 中返回按周分组的 Postgres 记录