|
|
本帖最后由 aloha20200628 于 2026-6-21 13:55 编辑
回看这个老帖,其实还有提升效率的余地,因是处理当前目录中的文件名,故可用系统对单个文件名(不含路径)长度的限量(255个字符)作为逐字遍历的上限,比采用批处理单个变量长度 8KB 字节量定限更短,其运行结果会比采用 call 或 goto 方法明显提速。
原帖楼主推荐的 5 楼代码,若遭遇文件名中非英文字母字符含量多于32个字符的实况,则会失效,除非代码增补更多的拼接操作...
重命名.bat
- @echo off &setlocal &for %%F in (*) do if "%%~nxF" neq "%~nx0" (
- set "f=%%F" &set "nf=%%~nF" &set "xf=%%~xF"
- setlocal enabledelayedexpansion &for /l %%i in (0,1,255) do set "c=!nf:~%%i,1!" & if defined c if /i "!c!" geq "a" if /i "!c!" leq "z" set "_nf=!_nf!!c!"
- ren "!f!" "!_nf!!xf!" &endlocal )
- exit/b
复制代码
当然若采用 powershell 正则方法会使代码更加轻量化...
重命名.bat
- @echo off &powershell -nop -c "dir -file * -exclude '%~nx0'|%%{ $f=($_.basename -replace '[^a-z]', '')+$_.extension; ren $_ $f; }"
- exit/b
复制代码 |
|