2013-10-12 33 views
1

这里重命名文件是代码:批处理文件 - 基于父母的姓名和(子)文件夹(S)名字

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 

任何帮助吗?

回答

2

这会将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是:
c:\path\to\folder\filename.ext

第二%% b对于给定的c:\path\to\folder部分和\.被添加到最终使其成为c:\path\to\folder\.,其解析为当前目录to并且将其解释为folder作为文件名。

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

我希望这是相当清晰的,并检查代码。

FOR /?帮助的最后一页介绍了元变量。

+0

那么,在一行代码中工作得很好。你想解释一下这些命令吗? –

+0

谢谢请参阅我编辑的答案。 – foxidrive

+0

非常感谢。这非常有帮助。 –

相关问题