Board logo

标题: [文本处理] bat批量给文件名从第5位开始补齐4个0,最后两位不不变 [打印本页]

作者: sunqv    时间: 2023-10-5 07:58     标题: bat批量给文件名从第5位开始补齐4个0,最后两位不不变

bat批量给文件名从第5位开始补齐4个0,最后两位不不变?

源文件名:               目标文件名:
YSP401-1.JPG         YSP40001-1.JPG
YSP42-2.JPG            YSP40002-2.JPG
WSP510-1.JPG        WSP50010-1.JPG
WSP510-2.JPG        WSP50010-2.JPG

求大神帮忙,不胜感激
作者: pd1    时间: 2023-10-5 09:25

  1. powershell -c "dir *.jpg|%{$qian=$_.Name.Split('-');$newname='{1}{0:d4}-{2}' -f [int]$qian[0].Substring(4),$qian[0].Substring(0,4),$qian[1];ren $_ $newname}"
复制代码

作者: Five66    时间: 2023-10-5 11:46

  1. @echo off
  2. for %%a in (*.JPG) do (
  3. set "n=%%~na"
  4. setlocal enabledelayedexpansion
  5. if "!n:~4,-2!" neq "" (
  6. set /a "m=10000!n:~4,-2!+0" 2>nul && rename "%%a" "!n:~0,4!!m:~-4!!n:~-2!%%~xa" 2>nul
  7. )
  8. endlocal
  9. )
  10. pause
复制代码

作者: 77七    时间: 2023-10-5 20:17

  1. @echo off
  2. for /f "tokens=1* delims=-" %%a in ('dir /b /a-d *-*.jpg') do (
  3. set a=%%a
  4. set b=%%b
  5. setlocal enabledelayedexpansion
  6. set c=0000!a:~4!
  7. ren "!a!-!b!" "!a:~0,4!!c:~-4!-!b!"
  8. endlocal
  9. )
  10. pause
复制代码

作者: Nsqs    时间: 2023-10-7 02:46

回复 2# pd1
  1. powershell -noprofile -executionpolicy bypass "dir *.jpg|%%{ren $_ ([regex]::Replace($_,'(?<=\D+\d+)\d+(?=-.+)',{param([string]$x) '{0:d4}' -f [int]$x}))}"
复制代码
写复杂了
作者: Nsqs    时间: 2023-10-7 03:10

  1. (?<=\D{3}\d+)\d+(?=-.+)
复制代码
要准确一点的话用这个吧,那个有点偷鸡,非数字可能会超过4位
作者: hfxiang    时间: 2023-10-11 11:16

回复 1# sunqv
sed( http://bcn.bathome.net/tool/4.9/sed64.exe )实现方法如下:
  1. sed -r ":a;/^(.{4})[0-9]{4}-([0-9]\.JPG)$/b;s/^(.{4})([0-9]+-[0-9]\.JPG)$/\10\2/;ba" a.txt>b.txt
复制代码

作者: hfxiang    时间: 2023-10-11 11:46

回复 1# sunqv

针对楼主样本,如果要直接修改文件名,方法如下:
  1. dir *.JPG /b/a-d|sed -r -e"h;:a;/^(.{4})[0-9]{4}-([0-9]\.JPG)$/bb;s/^(.{4})([0-9]+-[0-9]\.JPG)$/\10\2/;ba;:b;x;G;s/^(.+)\n(.+)$/ren \1 \2/"|cmd.exe
复制代码

作者: hfxiang    时间: 2023-10-11 12:36

对8楼的脚本改进一下,效率更高:
  1. dir *.JPG /b/a-d|sed -r "h;s/^(.{4})([0-9]+-[0-9]\.JPG)$/\10000\2/;s/^(.{4}).*([0-9]{4}-[0-9]\.JPG)$/\1\2/;x;G;s/^(.+)\n(.+)$/ren \1 \2/"|cmd.exe
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2