如何重命名JPG图片文件,在文件名日期时间部分插入短横线与点?
解决Windows CMD批量重命名文件的问题
你要把文件名里的日期格式从YYYYMMDD_HHMMSS改成YYYY-MM-DD_HH.MM.SS,但原来用的ren ????????_??????-*.* ????-??-??_??.??.??-*.*命令无效——因为CMD的rename通配符只能替换对应位置的单个字符,没法插入新的分隔符(-和.),它做不了这种结构重组的重命名操作。
下面给你两个可行的解决方法:
方法一:用CMD的for循环处理
在CMD命令行里直接执行这段命令(如果要写成批处理文件,把所有%改成%%):
for %f in (20??????_??????-*.jpg) do ( set "fname=%~nf" set "date_raw=%fname:~0,8%" set "time_raw=%fname:~9,6%" set "suffix=%fname:~16%" setlocal enabledelayedexpansion set "new_date=!date_raw:~0,4!-!date_raw:~4,2!-!date_raw:~6,2!" set "new_time=!time_raw:~0,2!.!time_raw:~2,2!.!time_raw:~4,2!" ren "%f" "!new_date!_!new_time!!suffix!!~xf" endlocal )
操作逻辑:
- 遍历所有符合
20??????_??????-*.jpg格式的目标文件 - 拆分出文件名里的原始日期、时间和后缀部分
- 通过字符串截取把日期转成
YYYY-MM-DD格式,时间转成HH.MM.SS格式 - 拼接成新文件名后完成重命名
方法二:用PowerShell更简洁
如果你的系统可以打开PowerShell,这个写法更直观高效:
Get-ChildItem "20??????_??????-*.jpg" | Rename-Item -NewName { $baseParts = $_.BaseName -split '-' $dtParts = $baseParts[0] -split '_' $formattedDt = "$($dtParts[0].Substring(0,4))-$($dtParts[0].Substring(4,2))-$($dtParts[0].Substring(6,2))_$($dtParts[1].Substring(0,2)).$($dtParts[1].Substring(2,2)).$($dtParts[1].Substring(4,2))" "$formattedDt-$($baseParts[1])$($_.Extension)" }
操作逻辑:
- 获取所有目标文件后,拆分文件名的各个组成部分
- 对日期时间子串进行格式化重组
- 拼接成新文件名完成重命名
内容的提问来源于stack exchange,提问作者Sybren
相关产品推荐
相关产品推荐

