以下是代码:
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
任何帮助?
答案 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 /?
帮助的最后一页描述了元变量。