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

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

比如文件夹名称为AA
文件夹内的图片依次命名为
AA-01.jpg
AA-02.jpg
AA-03.jpg
...


我网上搜的
  1. @echo off
  2. call :loop "%cd%"
  3. for %%a in (*.jpg) do (
  4.    set /a n+=1
  5.    set "str=%%a"
  6.    setlocal enabledelayedexpansion
  7.    ren "!str!" "%var%-!n!%%~xa"
  8.    endlocal
  9. )
  10. pause&exit
  11. :loop
  12. set "var=%~nx1"
复制代码
运行之后发现不是-02而是-2
而且没有-1这张图

请大神指点,在线等,感激不尽!

放到图片同一目录下执行
  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

思路不错,赞一个。移动到新目录可避免重名!
如无特别说明,代码测试环境均为 XP SP3

TOP

回复 8# umenoko
移动重命名:
  1. @echo off
  2. md newfolder
  3. set n=100
  4. setlocal enabledelayedexpansion
  5. for %%i in (*.jpg) do (
  6.     set /a n+=1
  7.     for /d %%a in ("%%~dpi.") do move "%%i" "newfolder\%%~na-!n:~1!%%~xi"
  8. )
  9. pause
复制代码

TOP

回复 13# cutebe
有道理

TOP

重命名问题经常会出现【名字重复】修改失败,增加检查重名后又会出现【序号跳过】的状况!

原因是:检查了新名字,没有检查原来的名字。

思路:一、计算文件个数,得到序号范围;
   二、新旧文件名都检查,排除已改好的文件名;
   三、修改其他的文件名。
如无特别说明,代码测试环境均为 XP SP3

TOP

回复 11# qixiaobin0715

第一次运行↑

再次运行↑

我这边好像需要再次运行他才会出来-01.jpg欸,是我操作有什么问题吗?

TOP

我这里测试没问题:

TOP

回复 9# qixiaobin0715


    谢谢大神修改,但是运行出来的结果没有-01.jpg的图片,从-02.jpg开始的

TOP

已修改,多了个点

TOP

回复 6# smss


   您给的代码, txt文件是ANSI编码,但是运行不成功

TOP

本帖最后由 umenoko 于 2021-2-26 16:20 编辑

回复 6# smss


    不好意思啊我是个小白
楼上那位我复制代码进txt,然后后缀改为bat就能运行了。可是运行出来的文件夹名称是最外面那个母文件夹的名称,不知道原因出在哪里

TOP

批处理保存为ANSI编码 放入需要处理的文件夹下运行
善用搜索http://www.bathome.net/thread-2873-1-1.html

TOP

回复 4# smss


    亲,这个运行不成功

TOP

  1. @Echo off&SetLocal EnableDelayedExpansion&set n=100
  2. for /d %%i in (*)do for /r %%j in (*.bmp,*.jpg,*.gif,*.png)do set /a n+=1&ren "%%j" "%%~ni-!n:~1!%%~xj"
  3. pause
复制代码

TOP

返回列表