根据父目录重命名文件

时间:2017-05-12 17:59:41

标签: windows batch-file

我正在尝试仅使用某个级别的父级递归重命名一组文件。我有文件:

\test\d1\d2\d3\d1.png
\test\d4\d5\d6\d4.png
\test\d7\d8\d9\d7.png

应该转换为:

@echo off
pushd "C:\Users\test"
for /d %%P in (*) do for /f "delims=" %%F in ('dir /b /s /a-d "%%P"') do rename "%%F" "%%P_%%~nxF"
popd

使用for / R递归探索没有明确的解决方案来获取更高级别的文件夹来重命名为。

000.png是唯一的文件,中间dirrectories中没有。

我一直在尝试使用:

Account

来自另一个主题,但我无法理解脚本的作用。

1 个答案:

答案 0 :(得分:0)

@echo off
pushd "C:\Users\test"
for /d %%P in (*) do for /f "delims=" %%F in ('dir /b /s /a-d "%%P\000.png" 2^>NUL'
) do echo rename "%%~fF" "%%~nP%%~xF"
popd
  • pushd将当前文件夹存储到堆栈并更改为给定文件夹
  • popd恢复旧文件夹。
  • for /d迭代" C:\ Users \ test"中的所有子文件夹使用%%P您选择的名字。
  • for / f解析从该文件夹开始获取所有000.png文件的dir输出。
  • %%~nP仅使用~n修饰符获取文件夹的名称(d1 / d4 / d7)(请参阅for /?