일괄 처리 특수 파일 이름 변경 코드

b!a!1235@_ s%\#8i 3 c.rar h^e12 0~%l%!p!@. s321-의 파일.txt%o%%%%!O!ffi9~ce$-Wor8d 29 문서.docx 이름 바 꾸 기.bat 그림 1:일괄 처 리 를 실행 하여 이 세 파일 이름 의 숫자,한자,특수 문자 모두(빈 칸 포함)를 제거 하고 알파벳 만 포함 하 는 파일 로 이름 을 바 꾸 라 고 요구 하지만 접미사 이름 은 변경 할 수 없 으 며,일괄 처리 자체 이름 은 변경 할 수 없습니다.이름 바 꾼 후:basic.rar helps.txt oOffice Wor.docx 이름 바 꾸 기.bat 그림 2:요구:코드 가 간결 하고 통용 되 며 효율 이 낮 지 않 습 니 다.pusofalse:
 
@echo off
for %%a in (*.*) do (
if "%%~nxa" neq "%~nx0" (
set "name=%%~na"
setlocal enabledelayedexpansion
set name1=!name!
call :lp
ren "!name!%%~xa" "!nam!%%~xa"
set "nam="
endlocal
)
)
pause
:lp
if defined name1 (
set "var=!name1:~,1!"
if "!var!" leq "Z" (
if "!var!" geq "a" (
set "nam=!nam!!var!"
))
set "name1=!name1:~1!"
goto lp
)
batman:
 
@echo off
set "code=a b c d e f g h i j k l m n o p q r s t u v w x y z"
for /f "delims=" %%a in ('dir /s /a-d /b') do (
if "%%~nxa" neq " .bat" (
set "str=%%~na"&set "file=%%a"&set "var=%%~na"
setlocal enabledelayedexpansion
for %%i in (%code%) do set "str=!str:%%i=!"
set "str=!str: =!"&call :lp
ren "!file!" !files!%%~xa
endlocal
))
goto :eof
:lp
set /a n+=1
for /f "tokens=%n% delims=%str% " %%a in ("%var%") do (
if "%%a" neq "" set "files=!files!%%a"&goto lp
)
전체적인 사 고 를 묘사 하 세 요.문제 의 파일 이름 은 알파벳+숫자+특수 문자+한자 로 구성 되 어 있어 복잡 해 보이 지만 우 리 는 각 도 를 바 꾸 어 볼 수 있 습 니 다.파일 이름 은 구분자+자모 로 구성 되 어 있 습 니 다.(숫자,특수 문자,한 자 를 모두 성분 구분자 로 보 는 것)훨씬 간단 하지 않 습 니까?허허,귀 찮 은 건 뒤에 있어...그러면 우 리 는 또 문제 에 부 딪 혔 다.숫자,특수 문 자 는 수량 이 유한 하 다 고 할 수 있 지만 한 자 는 번 거 로 운 일이 다.우 리 는 delims=뒤에 모든 한 자 를 다 쓸 수 는 없 잖 아.(게다가 이 길 이 는 유한 하 다)?이것 은 불가능 한데,어떻게 하지?그래서 우 리 는 먼저 파일 이름 에 알파벳 이 아 닌 문 자 를 모두 제기 할 수 있 습 니 다.어떻게 제기 합 니까?이 는 변 수 를 사용 하여 26 자 모 를 모두 비 워 야 합 니 다.어떤 사람 은 효율 에 문제 가 있다 고 말 할 수 있 습 니 다.여기 에는 확실히 효율 문제 가 존재 합 니 다.그러나 여러분 은 문자 에 대한 판단 의 효율 을 생각해 보 세 요.이것 은 좀 높 아야 합 니 다.왜 요?한 파일 의 이름 이 10 여 개의 a 가 있다 고 가정 하면 한 글자 로 10 여 번 을 판단 해 야 하고 변 수 는 한 번 만 바 꾸 면 된다.이렇게 교 체 된 문자열 에는 알파벳 이 아 닌 문자 만 남 겨 진 것 이 아 닙 니까?이 제 는 구분자(빈 칸 추가)로 파일 이름 의 모든 자 모 를 추출 하 는 것 을 잊 지 마 세 요.나머지 작업 은 기술 처리 일 뿐 입 니 다.dishuo:pusofse 대나무 의 사고방식 에 따라 문 자 를 추출 하 는 데 가장 편리 한 도 구 는 정규 표현 식 입 니 다.일괄 처리 명령 의 유일한 정규 지원 은 findstr 입 니 다.이 를 통 해 추출 할 수 있 습 니까?테스트 성공!요구 만족:간결 하고 통용 되 며 효율 이 그리 낮 지 않다.특징:유 니 버 설 이 강하 기 때문에 findstr 의 정규 매개 변 수 를 수정 하면 각종 기능 을 실현 할 수 있 습 니 다.예 를 들 어 몇 가지 예 를 들 어 보 겠 습 니 다.   "[^-!-~0-9a-z]"전각 문자 유지(중국어,전각 구두점 등)"[a-z0-9]"영문 자모 와 숫자 유지
 
@echo off&cls
for /f "tokens=*" %%i in ('dir /b/a-d "*.*"') do (
if "%%~nxsi" neq "%~nxs0" (
set " =%%~nxsi"&set " =%%~ni"&set " ="&set "counter=0"
del ~filenamechar.lst /q>nul 2>&1
setlocal enabledelayedexpansion
call :split
for /f "tokens=*" %%n in ('findstr "[a-z]" ~filenamechar.lst') do set " =! !%%n"
if "! !" neq "" (
echo ren ! ! ! !%%~xi
) else (
echo ^( "! !" , .^)
)
endlocal
)
)
del ~filenamechar.lst /q>nul 2>&1
pause&goto :eof

:split
if "! :~%counter%,1!" neq "" (
if "! :~%counter%,1!" neq " " echo ! :~%counter%,1!>>~filenamechar.lst
set /a counter+=1
goto split
)
goto :eof

좋은 웹페이지 즐겨찾기