@echo off setlocal enabledelayedexpansion set "prefix_length=25" for %%f in (*.png) do ( set "filename=%%f" set "newname=!filename:~%prefix_length%!" ren "%%f" "!newname!" ) 试试这个,可能兼容性不太好
其实楼主的提问思路不对。观察楼主给的所有文件名其格式应该是 Ch数字_19个字符的日期和时间_其他字符 对比前四个文件前24个字符和剩余文件前25个字符可以发现需要删除的就是“Ch数字_19个字符的日期和时间_”这些字符,只需要保留“其他字符”即可。 所以问题就可以简化为保留第二个下划线后的文件名即可,代码如下: ```bat @echo off ::变量延迟扩展开启 setlocal enabledelayedexpansion ::循环当前文件夹下的文件名 for %%f in (*) do ( ::获取文件名 set "oldname=%%f" set "newname=" ::对文件名用_进行分割,%%a为第一个_到第二个_中间的内容,%%b为第二个_以后的所有内容 for /f "tokens=2,* delims=_" %%a in ("!oldname!") do ( set "newname=%%b" ) :: 只有当newname不为空且与oldname不同时才重命名 if defined newname if not "!newname!"=="!oldname!" ( ren "!oldname!" "!newname!" ) ) ::变量延迟扩展关闭 endlocal ```