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

[文件操作] 批处理如何给文件夹内的图片批量命名

[复制链接]
发表于 2021-2-27 10:33:52 | 显示全部楼层
思路不错,赞一个。移动到新目录可避免重名!
发表于 2021-2-28 14:17:07 | 显示全部楼层
放到图片同一目录下执行
  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
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 10:45 , Processed in 0.025059 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表