本帖最后由 aloha20200628 于 2024-5-14 10:58 编辑
针对楼主示例,前置字符量=16,且内容相同,被更名序号最大长度=3 算法关键是据此构建一个可基于被更名序号排序的链表文件...
如前置字符串内容不同,第2行中的匹配表达式改为一连串?*(亦可用for /l 累加合成)
如要简化第5行代码,可用call子过程代劳...
以下代码存为test.bat运行,置于被更名文件夹所在同目录
- @echo off &setlocal enabledelayedexpansion
- (for /d %%d in ("XX·1111-11-1111-*") do (
- set "v=%%d"
- set "vp=!v:~,16!"&set "v=!v:~16!"
- if "!v:~1,1!" gtr "9" (echo,00!v:~,1!/!vp!/!v:~1!/%%d) else if "!v:~2,1!" gtr "9" (echo,0!v:~,2!/!vp!/!v:~2!/%%d) else (echo,!v:~,3!/!vp!/!v:~3!/%%d)
- ))>1.tmp
- for /f "tokens=1-4 delims=/" %%1 in ('sort 1.tmp') do (
- set/a "n+=1"&set "vn=00!n!"&set "vn=!vn:~-3!"
- ren "%%4" "%%2!vn!%%3"
- )
- del/q 1.tmp&endlocal&pause&exit/b
复制代码
|