1

这是代码:

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

有什么帮助吗?

4

1 回答 1

4

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

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

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

第二个 %%b FOR 被赋予该c:\path\to\folder部分并将\.其添加到末尾,使其c:\path\to\folder\.解析为当前目录to并将其解释folder为文件名。

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

我希望这很清楚,以及检查代码。

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

于 2013-10-13T00:40:36.240 回答