게시 한 코드가 파일과 폴더의 이름을 바꿉니다. 그러나 재귀 적으로 폴더 내의 파일 및 폴더의 이름을 바꿉니다.
DIR 마스크에 확장명이 있고 폴더 이름에 일반적으로 확장명이 없으므로 폴더가 아닌 파일의 이름을 바꿀뿐입니다. 이 경우 DIR을 추가하기 만하면됩니다. /S
옵션을 사용하여 하위 폴더로 /A-D
폴더 제외 옵션 newname은 경로 이름을 무시하고 파일 이름만으로 설정해야합니다. %%nxF
. 그리고 MOVE 명령은 목적지 경로가 필요합니다. %%dpF
. 이것은 일반적으로 효과가있는 해결책을 제공 할 것이지만, 합병증이있을 수 있습니다 (자세한 내용은 나중에 설명합니다).
@echo off
setlocal enableDelayedExpansion
set "old=V1"
set "new=newdocV2"
for /f "delims=" %%F in ('dir /b /s /a-d *.ods') do (
set "newname=%%~nxF"
set "newname=!newname:%old%=%new%!"
move "%%F" "%%~dpF!newname!"
)
하나의 패스에서 파일과 폴더의 이름을 모두 바꾸려면 분명히
/A-D
선택권. 그러나 DIR 명령의 결과를 정렬하여 자식이 부모보다 먼저 처리되도록해야합니다. 그렇지 않으면 나열된 경로가 더 이상 유효하지 않기 때문에 자식 이름이 변경되지 않습니다.
@echo off
setlocal enableDelayedExpansion
set "old=V1"
set "new=newdocV2"
for /f "delims=" %%F in ('dir /b /s *.ods ^| sort /r') do (
set "newname=%%~nxF"
set "newname=!newname:%old%=%new%!"
move "%%F" "%%~dpF!newname!"
)
이제 잘못 될 수있는 문제와 해결 방법 및 기타 개선 사항이 있습니다.
1) 파일 또는 폴더 이름에 !
문자 (희귀하지만 가능). 지연 확장이 사용되는 동안 FOR 변수를 확장하면 포함 된 값이 손상됩니다 !
. 해결 방법은 지연된 확장을 루프 내에서 켜고 끄는 것입니다.
2) 파일 A의 새 이름은 파일 B의 기존 이름과 일치 할 수 있으며 MOVE 명령은 B를 A로 겹쳐 쓰게됩니다. 최종 결과는 두 개가 있기 전의 하나의 파일입니다. 이것은 아마도 나쁜 것입니다. 해결 방법은 MOVE 대신 REN 명령을 사용하는 것입니다. 이 경우 이름 바꾸기가 실패하고 좋은 일이라고 생각합니다. REN 명령에 새 이름이 필요합니다. 없이 목적지 패스.
3) 아마도 파일 / 폴더의 이름이 바뀐 방법 목록을 원할 것입니다. 오류가 발생하면 특히 이름 변경에 실패한 것을 정확히 볼 수 있습니다. 간단한 해결책은 명령을 실행하기 전에 명령을 ECHO하는 것입니다.
4) 새 이름이 이전 이름과 일치하면 이름 바꾸기 동작을 수행 할 필요가 없습니다. 이것은 IF 조건을 추가하여 수행됩니다.
@echo off
setlocal disableDelayedExpansion
set "old=V1"
set "new=newdocV2"
for /f "delims=" %%F in ('dir /b /s *.ods ^| sort /r') do (
set "source=%%F"
set "oldname=%%~nxF"
setlocal enableDelayedExpansion
set "newname=!oldname:%old%=%new%!"
if /i "!newname!" neq "!oldname!" (
echo ren "!source!" "!newname!"
ren "!source!" "!newname!"
)
endlocal
)
여전히 잠재적 인 문제가 있습니다. 예를 들어, 배치에는 =
변수 값 내의 문자. 이 문제는 순수한 배치로 해결하기가 어렵습니다.
당신이 단순히 내 인생을 사용하면 인생은 훨씬 간단 해집니다. JREN.BAT 유틸리티 - 정규 표현식을 사용하여 파일이나 폴더의 이름을 바꾸는 하이브리드 JScript / 배치 스크립트. JREN.BAT는 XP 이후의 모든 Windows 시스템에서 기본적으로 실행되는 순수한 스크립트입니다. 를 통해 전체 문서를 볼 수 있습니다. JREN /?
. 당신은
JREN /?|MORE
,하지만 내 콘솔 창을 이전 줄을 볼 수 있도록 스크롤 할 수 있도록 큰 버퍼로 구성되어 있으므로 더 이상 필요하지 않습니다.
이 도구를 사용하려면 정규 표현식을 이해해야합니다. 이 경우에는 문제가되지 않지만 검색어에 정규 표현식 메타 문자가 포함 된 경우 올바른 문자 해석을 얻으려면 이스케이프 처리해야합니다. 그러나 정규 표현식의 힘은 놀라운 것입니다. 변경 사항이 무엇인지 정확하게 설명 할 수 있습니다.
나는 /I
옵션을 사용하여 대 / 소문자 구분없이 검색 할 수 있습니다.
JREN.BAT는 파일의 이름 만 바꿉니다. 또는 두 파일의 이름을 바꾸려면 두 개의 명령이 필요합니다.
jren "V1" "newdocV2" /i /s /fm "*.ods"
jren "V1" "newdocV2" /i /s /fm "*.ods" /d
JREN은 일괄 처리 스크립트이므로, CALL JREN
위의 명령을 다른 배치 스크립트에 넣으면됩니다.