2012-06-18 4 views
2

안녕하세요. .bat 파일을 사용하여 파일 이름 바꾸기에 도움이 필요합니다. 지정된 문자 번호 다음에자를 필요가있는 파일이 여러 개 있습니다. exmample를 들어 , 나는이 방법.bat를 사용하여 파일 이름 바꾸기?

filename.exe > filen.exe 
anothername.exe > anoth.exe 
absolutelydifferentname.exe > absol.exe 

그리고, 가능하다면, 나는 그 반대 작업을 수행하는 방법을 알고 싶습니다, 5 번째 문자 다음에 파일의 이름을 자르려. 내 말은, 특정 문자 수를 파일 이름의 시작 부분에서 자르는 것입니다.

감사합니다. 배치 파일에서 작업을 수행하려면이 한 번 오프, 또는 다른 수동 시나리오는 그냥 넣다

+2

'filename.exe'과'filename2.exe'가 있으면 어떻게됩니까? 당신은'filen.exe' 두 가지를 가질 수 없습니다 .. – Blorgbeard

+1

http://stackoverflow.com/questions/636381/what-is-the-best-way-to-do-a-substring-in-a-batch 하위 문자열을 찾아야하기 때문에 -file이 유용 할 수 있습니다. Blorgbeard의 코멘트는 당신이 어떻게 다루는 지 고려해야 할 필요가있는 것입니다. – Shoaib

답변

4

에서 봐 가지고, 다음과 같은 작업을해야합니다 :

@echo off 

setlocal ENABLEDELAYEDEXPANSION 

for %%i in (<Directory name here>\*) do (
    set filename=%%~ni 
    ren "%%~i" "!filename:~0,5!%%~xi" 
) 

endlocal 

최종 파일 이름을 구성하는 데 사용되는 문자 수를 변경하려면 ren "%%~i" "!filename:~0,5!%%~xi"에서 "5"를 변경하십시오.

은 지난 5 자 시도 촬영하려면 : ren "%%~i" "!filename:~-5!%%~xi"

모든 제외하고는 제 5 개 문자의 경우 : ren "%%~i" "!filename:~5!%%~xi"

+0

고마움, @ 이리듐. 이 방법으로 편집 됨 'setlocal EnableDelayedExpansion (* .exe)의 %% i에 대해 ( ) 파일 이름 = %% ~ ni "%% ~ i" "! 파일 이름 : ~ 0,5! %% ~ xi")' 잘하고있는 것 같습니다. 끝 대신 처음부터자를 수있는 방법을 아는 지 궁금합니다. – get8p

+0

나는 당신의 제안을 포함시키기 위해 나의 대답을 편집했다. (길이 있어야한다는 것을 알았지 만, setlocal을 체크하지 않았다.) 마지막 X 문자를 가져 오는 방법도 추가했습니다 – Iridium

+0

그래, 그럴거야. 감사합니다. 친구여, 최고입니다! – get8p

2

Iridium solution이 실패 %%i의 확장이 실패하기 때문에 모든 파일 이름이 ! 문자가 포함 된 경우 값이 !이고 지연된 확장이 사용되는 경우 이는 루프 내에서 지연된 확장을 켜고 끄는 방식으로 쉽게 해결할 수 있습니다.

정상적으로 지연된 확장을 명시 적으로 사용하지 않도록 설정하는 것은 일반적으로 필요하지 않습니다. 그러나 배치 파일의 시작 부분에서 지연된 확장을 이미 사용할 수 있으므로 안전하게 포함되었습니다.

@echo off 
setlocal disableDelayedExpansion 
for %%F in ("<Directory name here>\*") do (
    set "full=%%F" 
    set "name=%%~nF" 
    set "ext=%%~xF" 
    setlocal enableDelayedExpansion 
    ren "!full!" "!name:~0,5!!ext!" 
    endlocal 
) 
+0

+1 그리고 확장 된'SET' 문법을 사용하면 보이지 않는 공백에 대해서도 안전합니다 :-) – jeb

+0

@jeb 매우 사실 - 완료되었습니다 – dbenham