2013-10-12 67 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

非常感謝。這非常有幫助。 –

相關問題