一b!a!1235@_ s%#8i 三 c.rar h^e12 0~%l%!p!@. s321-的文件.txt %o%%% !O!ffi9~ ce$- Wor8d29 文档.docx 重命名.bat 图1: 要求运行批处理将这三个文件文件名中的数字、汉字、特殊字符全部(含空格)去掉,而重命名为只含字母的文件,但 后缀名不能更改,同时批处理自身名字不能更改,重命名后: basic.rar helps.txt oOfficeWor.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 )