[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 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

求大神帮忙,不胜感激

  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}"
复制代码

TOP

  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
复制代码

TOP

  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
复制代码
bat小白,请多指教!谢谢!

TOP

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

评分人数

TOP

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

TOP

回复 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
复制代码

TOP

回复 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
复制代码

TOP

对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
复制代码

TOP

返回列表