[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
思路不错,赞一个。移动到新目录可避免重名!
如无特别说明,代码测试环境均为 XP SP3

TOP

放到图片同一目录下执行
  1. ::图片顺序命名:前缀为目录名-后缀为等长数字(数字唯一,长度不足补0)
  2. ::思路:先得到文件数;再排除改好的文件;后修改其他文件名。
  3. @echo off
  4. cd/d%~dp0
  5. ::文件扩展名
  6. set "ext=.jpg;.png;.jpeg"
  7. ::获取目录名
  8. call :getDirName "%cd%" dirName
  9. echo 目录名 *%dirName%*
  10. set picNum=0
  11. ::计算图片数
  12. for %%p in (%ext:.=*.%)do set/a picNum+=1
  13. echo 目录中共有 %picNum% 个图片。
  14. ::补0个数
  15. set/a_0N=-1,CN=%picNum%,startNum=1
  16. :fill0
  17. set/a CN/=10,_0N+=1,startNum=%startNum%0,Nbit=_0N+1
  18. if %CN% neq 0 goto :fill0
  19. echo 起数:%startNum% 位数:%Nbit% 补0:%_0N%个。
  20. set/a renNum=startNum+1,_0=1
  21. ::改名
  22. setlocal enableDelayedExpansion
  23. for /f "delims=" %%p in ('dir/b %ext:.=*.%')do (
  24. call :oldNameChk chgYes "%%~np" "%dirName%" %picNum% %startNum%
  25. if defined _!chgYes! (
  26. call :newNameChk renNum %Nbit% "%ext%" "%dirName%"
  27. echo ren "%%p" "%dirName%-!renNum:~-%Nbit%!%%~xp"
  28. ren "%%p" "%dirName%-!renNum:~-%Nbit%!%%~xp"
  29. set/a renNum+=1
  30. )else set _!chgYes!=1
  31. )
  32. pause
  33. goto :eof
  34. ::====完====
  35. :getDirName dirPath dirName ::获取目录名
  36. set %2=%~nx1
  37. goto :eof
  38. :oldNameChk chgFlag fileName dirName fileNum beginNum ::旧名检查
  39. setlocal
  40. set "fileName=%~2"
  41. set "chkNum=!fileName:*%~3-=!"
  42. set fchk=0
  43. if "%~3-%chkNum%" neq %2 goto :chkend ::前缀检查:不含目录名或有多余字符
  44. for /f "delims=0123456789" %%s in ("%chkNum%")do set str=%%s
  45. if "%str%" neq "" goto :chkend ::后缀检查:后缀有非数字
  46. set/aN=1%chkNum%-%5
  47. if %N% gtr 0 if %N% leq %4 set fchk=%chkNum%
  48. :chkend ::跳到此处的要改名:后缀数字正常但文件名重复/未补0/不含目录名/含多余字符
  49. endlocal&set %1=%fchk%
  50. goto :eof
  51. :newNameChk renNum Numbit exts dirName ::新名检查
  52. setlocal
  53. set/a newNum=%1
  54. :plusNum
  55. for %%e in (%~3)do if exist "%~4-!newNum:~-%2!%%e" set/a newNum+=1&goto :plusNum
  56. endlocal&set "%1=%newNum%"
  57. goto :eof
复制代码
如无特别说明,代码测试环境均为 XP SP3

TOP

返回列表