2012-01-23 3 views
2

사람들이 Perl에서이 작업을 수행하는 것을 보았지만 배치를 통해 수행 할 수있는 방법이 있는지 궁금합니다. Windows에 내장되어 있으므로 일괄 처리 스크립트로이를 수행하는 방법을 아는 것이 더 유용 할 것이라고 생각합니다. 컴퓨터에 아무 것도 설치할 필요가 없습니다.배치 : 어떻게 파일의 이름을 일괄 적으로 바꿉니 까?

예시 입력 상품명 : myFile_55 예시 출력 패턴 : picturemyFile 변경, 13 예시적인 출력에 의해 수를 줄일 : picture_42.

어떻게 접근하나요? 이름을 바꿀 배치 명령을 알고 있습니다 :

ren myFile_55 picture_42. 내가 renamer.bat라는 이름의 파일이있는 경우

그래서, 나는 다음을 추가 할 수 있습니다

for /r %%x in (%1) do ren "%%x" %2합니다.

renamer.bat myfile* picture* :

그럼 내가이 명령을 입력 할 수 있습니다.

그러나 숫자를 줄이는 방법을 모르겠다.

+1

cmd에서'set /? '을보세요. 제 생각에'set/a'는 일괄 적으로 숫자를 처리하므로 for 루프에서 숫자를 빼기 위해 사용할 수 있습니다. –

+0

@balic 모든 파일의 이름을 폴더 이름을 추가 한 것으로 바꾸려면 어떻게해야합니까? 나는 이것이 흥미로운 주제라고 생각한다. 나는 좋은 대답과 위키를 갖고 싶기 때문에 모든 종류의 파일명 변경 알고리즘에 대해 이야기 할 수 있습니다. –

+0

나는 그것에 대해 어떻게 생각할지 모르겠다.하지만 재미있는 주제라고 동의했다. 바라건대 일부 일괄 처리 전문가가 이에 대해 밝힐 수 있기를 바랍니다! –

답변

1

아마도 for 루프를 통해 원본 파일 이름을 넣고 이름과 숫자를 추출한 다음 숫자에 수학을 수행 한 다음 새 이름과 번호로 다시 연결합니다. 한 파일 이름 형식은 다음과 같이 name_number이를 사용할 수 있습니다

REM Allow for numbers to be iterated within the for-loop i.e. the i - z 
SETLOCAL ENABLEDELAYEDEXPANSION 
SET i=0 
SET z=13 
SET newName=picture 
SET workDir=C:\Path\To\Files 

REM Given that filenames are in the format of 'Name_number', we're going to extract 'number 
REM and set it to the i variables, then subtract it by 13, then rename the original file 
REM to what the newName_x which if the filename was oldName_23 it would now be newName_10 
FOR /r %%X in (%1) do (
    FOR /F "tokens=1-2 delims=_" %%A IN ("%%X") DO (
    SET i=%%B 
    SET /A x=!i! - %z% 

    REM ~dpX refers to the drive and path of the file 
    REN "%%~dpX\%%A_%%B" "%newName%_!x!" 
) 
) 

편집 : REN 명령을 편집 원본 파일의 드라이브와 경로를 포함 할 수 있습니다. 소문자 x에서 대문자 X로 바뀌어 혼동하지 말 것. %%~dpX.

+0

하나의 SET 명령 만 사용할 수 있습니다 : 이전의 두 개 대신'SET/A x = %% B - % z %'. – Aacini

+0

@mechaflash 줄을 조금 설명해 주시겠습니까? 일괄 처리가 대단히 어렵습니다. –

+0

코드에 일부 REM 문이 추가되었습니다. 도움이되기를 바랍니다. – Mechaflash

관련 문제