2016-08-25 5 views
1

파일 이름이 18 자보다 작은 경우 파일 이름에 앞에 0이 붙는 스크립트가 있습니다. 예를 들어일괄 처리 스크립트를 사용하여 파일 이름 바꾸기

파일 이름은 다음이 0000000000로 이름을 변경해야하고 123456789 경우, 다음이 00000000하게, 1234567 경우. 내 코드는 이미 내 요구 사항은 파일 이름이 1234567-1 경우, 다음 이름이 1234567-a 인 경우가 0000000000_Type_1하고, 다음은 0000000000_Type_a로 이름을 변경해야해야한다는 것입니다

이제이 기능을하고있다.

이것은 내 스크립트가 수행하는 작업을 계속해야 함을 의미하지만 파일 이름에 접미사 _Type_<last character>을 추가해야합니다. 파일 이름은 1234567 또는 123456789 또는 1234567-1 또는 12345678-b 일 수 있으며 그 밖의 문자는 가능하지만 하이픈 (-) 앞에 항상 문자는 포함되지 않습니다. 한 폴더에 여러 개의 파일이있을 수 있습니다. 하이픈 (-)은 밑줄 (_) 다음에 Type_과 파일 이름의 마지막 문자로 대체해야합니다. 나는 다음과 같은 약간 수정 된 코드는, 당신이 찾고있는 무엇을해야한다고 생각

@echo off 
setlocal enableextensions enabledelayedexpansion 

rem iterate over tif files: 
for %%f in (C:\Task\Drop_Files\*.tif) do (
    rem store file name without extension 
    set FileName=%%~nf 

    rem Add leading zeroes: 
    set FileName=00000000000000000!FileName! 

    set FileName=!FileName:~-18! 

    set FileName=!FileName!%%~xf 

    rem Rename the file 
    rename "%%f" "!FileName!" 

) 

답변

1

다음 스크립트 (1234567-1를 등) (1234567 등)없이 당신이 원하는 :

@echo off 
setlocal enableextensions enabledelayedexpansion 

rem Iterate over TIF files: 
for %%f in ("%~dp0*.tif") do (
    rem Store file name without extension: 
    set "FileName=%%~nf" 

    rem Split off hyphen and suffix: 
    set "Suffix=!FileName:*-=!" 
    if "!Suffix!"=="!FileName!" set "Suffix=" 
    call set "FileName=%%FileName:-!Suffix!=%%" 
    if defined Suffix set "Suffix=_Type_!Suffix!" 

    rem Add leading zeroes: 
    set "FileName=00000000000000000!FileName!" 

    rem Build final file name: 
    set "FileName=!FileName:~-18!!Suffix!" 

    rem Rename the file: 
    rename "%%~ff" "!FileName!%%~xf" 
) 

내가 무슨 짓을 :

  • 이 도입 새 변수 Suffix은 하이픈 다음에 문자를 포함합니다 (예 : 파일 이름이 1234567-1 인 경우 1). 하이픈을 포함한 접미사 (예 : -1)는 파일 이름에서 제거됩니다 (이 경우 -1이 파일 이름에 두 번 이상 _ 생한 경우 실패합니다).
  • set 구문을 개선하여 할당 표현식을 따옴표로 묶습니다.
+0

원본 파일 이름이 0000000000012783_1이면 코드에서 파일 이름을 0000000000012783_1_Type_0000000012783_1로 생성합니다. 0000000000012783_Type_1이어야합니다. 무엇을해야할지 조언 해 주시겠습니까? – shuru

+0

죄송합니다. 'Suffix'에 대한 지연 확장을 한 번 적용하지 못했습니다. 내 [편집] (http://stackoverflow.com/revisions/39150386/2)를 참조하십시오 ... – aschipfl

+0

... 작동했습니다 ....thanks – shuru

0

:

여기에 기존 코드입니다. 기본적으로, 마지막 문자 다음에 대시 (-)가 있는지 여부를 테스트해야합니다.이 경우 _Type_으로 바꿉니다. 이렇게하려면 FileName의 마지막 2 문자를 추출한 다음 (확장자 없음) 두 추출 된 문자의 첫 문자를 확인하십시오. 대시이면 마지막 두 문자가 원래 _Type_ [char] 구문으로 바뀌므로 원래 파일 이름에서 제거합니다. 하이픈 접미사 (suffix)을 가지는 파일을 처리해야

@echo off 
setlocal enableextensions enabledelayedexpansion 

rem iterate over tif files: 
for %%f in (C:\tests\output*.txt) do (
    rem store file name without extension 
    set FileName=%%~nf 
    set IsDash=!FileName:~-2! 
    set IsDash=!IsDash:~0,1! 
    IF "!IsDash!" == "-" (
     SET FileType=_Type_!FileName:~-1! 
     SET FileName=!FileName:~0,-2! 
    ) ELSE (
     SET FileType= 
    ) 

    rem Add leading zeroes: 
    set FileName=00000000000000000!FileName! 

    set FileName=!FileName:~-18!!FileType! 

    set FileName=!FileName!%%~xf 
    rem Rename the file 
    rename "%%f" "!FileName!" 
) 
0
@echo off 
setlocal enableextensions enabledelayedexpansion 

rem Change current directory 
cd /D C:\Task\Drop_Files 

rem Iterate over tif files: 
for /F "tokens=1-3 delims=-." %%f in ('dir /B *.tif') do (

    rem Store file name without extension and leading zeroes: 
    set "FileName=00000000000000000%%f" 

    rem Get the right type and input name: 
    rem - If input name is "1234567.tif" then "%%h" is empty, so there is no Type part 
    rem - If input name is "1234567-1.tif" then "%%h" is "tif", so the Type is "_Type_%%g" 
    if "%%h" equ "" (
     set "input=%%f.%%g" 
     set "type=" 
    ) else (
     set "input=%%f-%%g.%%h" 
     set "type=_Type_%%g" 
    ) 

    rem Rename the file 
    rename "!input!" "!FileName:~-18!!type!.tif" 

) 
1

심플. 원래 코드에서 '이름 바꾸기'줄 바로 앞에 다음 줄을 추가하면됩니다.

set FileName=!FileName:-=_Type_! 

이제 끝났습니다.

+0

이것은 하이픈 부분이 붙은 파일에 대해서만 16 자리의 숫자 부분으로 이어집니다 ... – aschipfl

+0

@aschipfl 귀하의 의견에 감사드립니다. 그러나 제 해결책은 없을 것입니다. 일하니? –

+1

예 :'1234567-1'; 결과는'00000000_Type_1' (18 자리가 있어야하지만'_Type_' 전에 16 자리수)입니다 ... – aschipfl

관련 문제