2017-05-03 5 views
1

내용을 검색하고 찾은 파일의 이름을 바꾸는 데 문제가있는 폴더에 여러 개의 텍스트 파일이 있습니다. 일괄 처리를 실행하면 찾은 모든 파일의 이름을 동일한 파일 이름으로 바꿉니다. 따라서 문자열이 포함 된 3 개의 파일을 찾으면 모든 파일의 이름을 동일한 파일로 바꿉니다. 아직도이 물건에 새로운. 내가 TEST1을 모든 텍스트 파일의 내부 문자열 "TEST1"을 발견하고있는 test1.txt 할 수있는 파일의 이름을 변경하려합니다 (2)가 .txt 등배치 파일의 이름을 바꿉니다.

@ECHO OFF 
@SETLOCAL enableextensions disabledelayedexpansion 

SET "sourcedir=C:\test" 
SET "searchfor=test1" 
FOR /f "delims=" %%a IN ('findstr /m /L /c:"%searchfor%" "%sourcedir%\*.txt"') DO (
REN "%%a" "%searchfor%.txt" 
) 
+0

_probably'/ SET 사용하면 카운터를 추가해야 할거야 A'_을 REN'aming'전 (혼동을 피하기 위해 "히트"적은 수의 사본에 테스트를 수행) 'IF \ ELSE' 식을'EXIST'와 함께 사용하십시오. – Compo

+0

귀하의 질문에 대한 답변이 아니지만 test1이 포함 된 단어는 피하기 위해'('findstr/m/L/c : "\ <% searchfor % \>" "% sourcedir % \ *. txt"') test1뿐만 아니라 –

+0

@UlugToprak, **'/ L' **을 정할 때 **'\ <'** 및 **'\>'**는 리터럴 문자로 간주되어야하며 의도 한 문자열과 일치하지 않아야합니다 . – Compo

답변

1

변화

REN "%%a" "%searchfor%.txt" 

if exist "%searchfor%.txt" (
    set "renamed=" 
    for /L %%r in (1,1,100) do if not defined renamed if not exist "%searchfor% (%%r).txt" REN "%%a" "%searchfor% (%%r).txt"&set "renamed=%%r" 

) else (
    REN "%%a" "%searchfor%.txt" 
) 

로 이는 각 % searchfor %가 .txt 존재 여부를 검출하고, 대상 파일의 이름을 변경하지 않을 경우 제 파일명 투 - 변경한다. % searchfor % .txt가 존재하면 renamed 플래그를 으로 설정하고 아무 것도으로 설정하고 %%r = 1에서 100까지 루프를 1로 설정하십시오. 파일 이름이 %searchfor% (%%r).txt이 아닌 경우 이름을 바꾸고 renamed을 (잘 - 모든 이외의 값은이됩니다 - %%r이 편리합니다. renamed이 정의되었으므로 if not defined은 false가되므로 더 이상 대상 파일 이름을 변경하려고 시도하지 않습니다.

(테 스트되지 않음)

주 - 구문이 중요합니다. 문장을 여러 줄로 나누거나 괄호의 위치를 ​​변경하지 마십시오. 잘라 붙이기 만하면됩니다.

팁 : 단순히 제안 된 이름 바꾸기를보고합니다

대신 ren 사용 echo ren. 분명히 파일의 이름이 실제로 바뀌지 않으므로 프로시 저는 동일한 새 이름을보고합니다. 그런 다음 수동으로 %searchfor%.txt을 만들고 다시 시도하십시오. 그런 다음 수동으로 %searchfor% (1).txt을 만들고 다시 시도하십시오. 제안 된 새 이름이 변경됩니다. 이 방법으로 테스트 한 후에 echo renren으로 변경하면 모두 원활하게 진행됩니다.

관련 문제