@echo off
setlocal EnableDelayedExpansion
set preserve=abcdefghijklmnopqrstuvwxyz 1234567890
for %%a in (*.*) do (
set "filename=%%~Na"
call :RemoveChars filename newFilename=
if "!newFilename!" neq "%%~Na" ren "%%a" "!newFilename!%%~Xa"
)
goto :EOF
:RemoveChars filename newFilename=
set %2=
:nextChar
set "char=!%1:~0,1!"
if "!preserve:%char%=!" neq "%preserve%" set "%2=!%2!%char%"
set "%1=!%1:~1!"
if defined %1 goto nextChar
exit /B
下面的版本将比以前的版本运行得快得多,但需要进行多次修改才能管理字符串中的某些特殊字符remove
。
@echo off
setlocal EnableDelayedExpansion
set remove=@#$()[]
for %%a in (*.*) do (
set "filename=%%~Na"
call :RemoveChars filename newFilename=
if "!newFilename!" neq "%%~Na" ren "%%a" "!newFilename!%%~Xa"
)
goto :EOF
:RemoveChars filename newFilename=
set "%2=!%1!"
set "remove2=!remove!"
:nextChar
set "char=!remove2:~0,1!"
set "%2=!%2:%char%=!"
set "remove2=!remove2:~1!"
if defined remove2 goto nextChar
exit /B