2014-10-21 3 views
0

Windows 배치 파일의 파일 이름에서 처음 9자를 제거해야합니다.첫 번째 9 문자를 배치 파일의 파일 이름에서 제거하십시오

내가 벗겨 문자를 필요로하는 파일 이름 형식은

0009mmdd_abcd_abcdefgh_00009_yyyymmddhhmmss.dat

나는 다음을 사용하여 시도

이지만 그것을 얻을 출력은

SET oldName = 00091017_abcd_abcdefgh_00009_20141021111145.dat 
SET newName = ~9 
echo 00091017_abcd_abcdefgh_00009_20141021111145.dat 
echo 
echo 
echo !newname! 
) 
00091017_abcd_abcdefgh_00009_20141021111145.dat 
ECHO is on. 
ECHO is on. 
ECHO is on. 
입니다

setlocal enabledelayedexpansion 
for /f %%a in ('dir /b *.dat') do (
    SET oldName = %%a 
    SET newName = %oldName:~9% 
    echo %%a 
    echo %oldName% 
    echo %newName% 
    echo !newname! 
) 

작동하지 않습니다

도움을 주시면 대단히 감사하겠습니다.

+0

지연 확장에 대해 알고 있고 사용하십시오. 결과적으로'set newname =! oldname : ~ 9!'(그리고'set' 명령의 공백을 제거하십시오). – Stephan

답변

0
SET oldName = %%a 
SET newName = %oldName:~9% 
      ^Space included in value 
     ^ Space included in variable name 

그래서 %oldName %%newName %이라는 두 개의 변수를 정의하고 있습니다. 당신의 진짜 문제는 첫 번째 밑줄 전에 문자열을 제거하는 경우

@echo off 
    setlocal enabledelayedexpansion 
    for /f "delims=" %%a in ('dir /a-d /b *.dat') do (
     SET "oldName=%%a" 
     SET "newName=!oldName:~9!" 
     echo %%a 
     echo !oldName! 
     echo !newname! 
    ) 
1

으로 시도 :

setlocal 
for /f "tokens=1*delims=_" %%a in ('dir /a-d /b *.dat') do (
echo(ren "%%a_%%b" "%%b" 
) 

참고 : 첫 번째 밑줄 부분을 가정하는 것은 삭제 될 수 있습니다.

지침은 테스트 목적으로 만 echo입니다. echo(renren으로 변경하여 이름을 실제로 변경하십시오.

a-ddir에 추가되어 디렉토리 이름을 제외시키는 명령입니다.

+0

마구, 너 천재 야. 귀하의 솔루션은 완벽하게 작동했습니다. 신속하게 답변 해 주셔서 감사합니다. – Gibby

+0

그러면 답에 'check'표시를 클릭하십시오. –

관련 문제