批处理文件 - 根据父名称和(子)文件夹名称重命名文件

时间:2013-10-12 22:44:54

标签: batch-file batch-rename

以下是代码:

for /r %%a in (*.jpg, *.png, *.bmp, *.exe) do (
  for /d %%d in (%CD%) do (
    set newname=%%~nd%~x1
    ren "%%~a" "!newname!%%~Xa"
    echo media file in %%~fa renamed to "!newname!%%~Xa"
  )
)

主要问题是子文件夹中的文件最终以文件名作为父目录名从我运行bat文件。

发生的事情的例子:

C:\parent\name.jpg renamed to C:\parent\parent.jpg
C:\parent\child\name.jpg renamed to C:\parent\child\parent.jpg
C:\parent\child1\child2\name.jpg renamed to C:\parent\child1\child2\parent.jpg

我需要:

C:\parent\1.jpg rename to C:\parent\parent.jpg
C:\parent\child\1.jpg rename to C:\parent\child\child.jpg
C:\parent\child1\child2\name.jpg renamed to C:\parent\child1\child2\child2.jpg

任何帮助?

1 个答案:

答案 0 :(得分:3)

这会将ren命令回显到屏幕上 删除echo关键字,使其实际执行重命名。

@echo off
for /r %%a in (*.jpg *.png *.bmp *.exe) do for %%b in ("%%~dpa\.") do echo ren "%%~a" "%%~nxb%%~xa"
pause

第一个%% FOR命令递归返回每个filespec,每个文件的格式为:
c:\path\to\folder\filename.ext

第二个%% b FOR被赋予c:\path\to\folder部分,\.被添加到最后,使c:\path\to\folder\.解析为to的当前目录并制作它将folder解释为文件名。

因此%%~nxb返回%% b的文件名和扩展名,在这种情况下为folder,并在rename命令中使用。 %%~xa返回%%的.extension字符串。

我希望这一点非常清楚,同时检查代码。

FOR /?帮助的最后一页描述了元变量。