2013-10-12 2 views
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" 
) 
) 

디렉토리 이름에서 박쥐 파일을 실행합니다. 어떤 일이 일어나는지

예 :

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

c:\path\to\folder 부분 \.을 부여하기위한 제 %% B는 첨가되는 현재 to 디렉토리로 해석되고 folder을 파일 이름으로 해석하도록 c:\path\to\folder\.으로 만듭니다.

따라서 %%~nxb은이 경우 folder 인 %% b의 파일 이름과 확장자를 반환하며이 파일은 rename 명령에 사용됩니다. %%~xa은 %% 문자열의 .extension을 반환합니다.

코드 검토와 함께 상당히 명확 해지기를 바랍니다.

FOR /? 도움말의 마지막 페이지에서 메타 변수를 설명합니다.

+0

코드 줄에서 제대로 작동했습니다. 명령에 대해 조금 설명하고 싶습니까? –

+0

감사합니다. 편집 된 답변보기. – foxidrive

+0

고맙습니다. 그게 아주 도움이. –