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

[文件操作] BAT怎样批量命名文件名?

数据恢复相机内存卡卡之后,文件名变了,导致在相机里面无法浏览照片,我手动修改文件名为img_1234,img_1235,img_1236,这样在相机里面才可以看照片,要是十几张我就手动命名了,可是1000多张呢,太累,能不能批处理呢?

简单说明一下,
这个批处理可以自动识别文件名中的连续数字,别且可以作为变量使用,
我写这个批处理,但是是为了方便重命名连续剧之类的文件,因为那些文件都有几集,几部之类的东西,
确实用ren *。*   XX*。* 命令是达不到预期效果的,
于是后来就写了个出来,现在都看不懂了
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. if not [%1]==[] (set lname=%1)& goto uud
  4. :kk
  5. cls
  6. set lname=
  7. set 路径=
  8. echo 请拖入需要批量重命名的文件以获取相关路径及文件名
  9. set /p lname=需要修改的文件路径及名称:
  10. if [%lname%]==[] goto kk
  11. :uud
  12. call:a ^\ %lname%
  13. set 路径=%y%
  14. call:a . "%x%"
  15. set 文件名=%y:~0,-1%
  16. set 后缀=.%x%
  17. call:b "%文件名%"
  18. :qqqq
  19. cls
  20. set p=
  21. set /p="路径="<nul
  22. set lj=%路径%
  23. :oo
  24. for /f "delims=\ tokens=1,*" %%a in ("!lj!") do (
  25. if "%%a"=="" (
  26. goto sf
  27. ) else (
  28. set n=%%a
  29. set m=!n:~1,1!
  30. if "!m!"==":" (
  31. echo.!n!
  32. ) else (
  33. echo.       \%%a
  34. )
  35. set "lj=%%b"
  36. goto oo
  37. )
  38. )
  39. :sf
  40. echo 文件=   *%后缀%
  41. echo.
  42. echo 原名:
  43. echo %原始%
  44. echo 格式:
  45. echo %name%
  46. echo.
  47. echo 请将格式〖〗括弧中的数字作为变量使用
  48. echo 可以使用扩展命令1:6,将会追加变量后的六个字符(不包括变量本身代表的数字)
  49. echo 同时支持原文件名自由截取任意字符.格式 0:-8,6;
  50. echo 例如 XXXXX第1话 3:*  1和3作为变量使用
  51. set /p p=输入新的文件名:
  52. if not defined p goto qqqq
  53. set f=0
  54. set f1=0
  55. set w=0
  56. echo.^@echo off>"%路径%\撤销重命名.bat"
  57. echo.:由胡朝旭自制批量重命名批处理生成.以防重命名错误出现的次序混乱^<%date%%time%^>>>"%路径%\撤销重命名.bat"
  58. echo.set z=0 >>"%路径%\撤销重命名.bat"
  59. echo.>%temp%\mulu
  60. for /r "%路径%" %%q in (*%后缀%) do (
  61. set /a f1=!f1!+1
  62. echo %%q>>%temp%\mulu
  63. )
  64. for /f "delims= tokens=*" %%q in (%temp%\mulu) do (
  65. set /a f=!f!+1
  66. call:c "%%~nq"
  67. call:d "%p%" "%%~nq"
  68. echo ren "!cname!%后缀%" "%%~nxq" ^>nul 2^>nul^&if %%errorlevel%%==1 set /a z=%%z%%+1>>"%路径%\撤销重命名.bat"
  69. ren "%%q" "!cname!%后缀%" >nul 2>nul&if errorlevel 1 (
  70. set /a w=!w!+1
  71. )
  72. )
  73. del /q %temp%\mulu
  74. echo.echo 撤销重命名时出现%%z%%个错误>>"%路径%\撤销重命名.bat"
  75. echo.pause^>nul>>"%路径%\撤销重命名.bat"
  76. cls
  77. echo 需 处 理 文 件总数:%f1%
  78. echo 实际重命名操作次数:%f%
  79. echo 出现 未知错误 次数:%w%
  80. if /i %f1% neq %f%  echo.&echo.&echo.&echo 可能出现文件重复重命名情况,请自行修改.任意键继续&pause>nul
  81. if /i %w% neq 0 pause>nul
  82. goto kk
  83. :有时会有将第一个被重命名的文件再添加到列表中重命名一次的问题.
  84. ::------------------------------------------------------------------------
  85. :a
  86. set y=
  87. set "x=%2"
  88. set "x=%x:"=%"
  89. :y
  90. for /f "delims=%1 tokens=1,*" %%a in ("%x%") do (
  91. if "%%b"=="" (
  92. goto EOF
  93. ) else (
  94. set "y=%y%%%a%1"
  95. set "x=%%b"
  96. goto y
  97. )
  98. )
  99. ::------------------------------------------------------------------------
  100. :b
  101. set "xx=%1"
  102. set "xx=%xx:"=%"
  103. set name=
  104. set 原始=
  105. set 列=0
  106. set 初始值=0
  107. :st
  108. set "l=!xx:~%初始值%,1!"
  109. if "%l%"=="" goto EOF
  110. :mm
  111. if /i !l! leq 9 (
  112. if /i !l! geq 0 (
  113. set /a 列=!列!+1
  114. set "原始=!原始!〖!l!"
  115. goto nn
  116. )
  117. )
  118. set /a 初始值=!初始值!+1
  119. set "name=!name!!l!"
  120. set "原始=!原始!!l!"
  121. goto st
  122. :nn
  123. set /a 初始值=!初始值!+1
  124. set "l=!xx:~%初始值%,1!"
  125. if "%l%"=="" (
  126. set "name=!name!〖!列!〗"
  127. set "原始=!原始!〗"
  128. goto EOF
  129. )
  130. if /i !l! leq 9 (
  131. if /i !l! geq 0 (
  132. set "原始=!原始!!l!"
  133. goto nn
  134. )
  135. )
  136. set "name=!name!〖!列!〗"
  137. set "原始=!原始!〗"
  138. goto st
  139. ::------------------------------------------------------------------------
  140. :c
  141. set "xx=%1"
  142. set "xx=%xx:"=%"
  143. set 列=1
  144. set 初始值=0
  145. set "l=!xx:~%初始值%,1!"
  146. :st2
  147. if "%l%"=="" goto EOF
  148. :mm2
  149. if /i !l! leq 9 (
  150. if /i !l! geq 0 (
  151. set "p=!l!"
  152. goto nn2
  153. )
  154. )
  155. set /a 初始值=!初始值!+1
  156. set "l=!xx:~%初始值%,1!"
  157. goto st2
  158. :nn2
  159. set /a 初始值=!初始值!+1
  160. set "l=!xx:~%初始值%,1!"
  161. if "%l%"=="" goto EOF
  162. if /i !l! leq 9 (
  163. if /i !l! geq 0 (
  164. set "p=!p!!l!"
  165. goto nn2
  166. )
  167. )
  168. set %列%=%p%
  169. set /a 列=!列!+1
  170. set p=
  171. goto st2
  172. ::------------------------------------------------------------------------
  173. :d
  174. set "xx=%1"
  175. set "xx=%xx:"=%"
  176. set "yy=%2"
  177. set "yy=%yy:"=%"
  178. set cname=
  179. set 初始值=0
  180. :st3
  181. set "l=!xx:~%初始值%,1!"
  182. set /a 初始值=!初始值!+1
  183. set "l1=!xx:~%初始值%,1!"
  184. if /i !l! equ 0 (
  185. if "!l1!"==":" ( call:pp "%yy%") else (
  186. set /a 初始值=!初始值!-1
  187. set "cname=!cname!!yy!"
  188. )
  189. )
  190. set /a 初始值=!初始值!-1
  191. set "l=!xx:~%初始值%,1!"
  192. if "%l%"=="" goto EOF
  193. :mm3
  194. if /i !l! leq 9 (
  195. if /i !l! geq 0 (
  196. set "k=!k!!l!"
  197. goto nn3
  198. )
  199. )
  200. set /a 初始值=!初始值!+1
  201. set "cname=!cname!!l!"
  202. goto st3
  203. :nn3
  204. set /a 初始值=!初始值!+1
  205. set l=!xx:~%初始值%,1!
  206. if "%l%"=="" (
  207. set "cname=!cname!!%k%!"
  208. set k=
  209. goto EOF
  210. )
  211. if /i !l! leq 9 (
  212. if /i !l! geq 0 (
  213. set "k=!k!!l!"
  214. goto nn3
  215. )
  216. )
  217. set "cname=!cname!!%k%!"
  218. set k=
  219. goto st3
  220. ::------------------------------------------------------------------------
  221. :pp
  222. set tt=
  223. set "x2=%1"
  224. set "x2=%x2:"=%"
  225. :pl
  226. set /a 初始值=!初始值!+1
  227. set "l=!xx:~%初始值%,1!"
  228. if "!l!"==";" (
  229. set "cname=!cname!!x2:~%tt%!"
  230. set /a 初始值=!初始值!+2
  231. goto EOF
  232. ) else (
  233. set "tt=%tt%%l%"
  234. goto pl
  235. )
  236. :EOF
复制代码

TOP

TOP

本帖最后由 林小七 于 2013-9-6 21:31 编辑

回复 1# qq544935474


   真是巧~昨天写了个和你说的差不多的脚本~稍微改了下~达到了你的要求~~不满意的地方自己改下或者回帖我~
放在和图片同一目录运行~
  1. @echo off
  2. set i=1233
  3. for %%a in (*.jpg) do (
  4. set /a i=i+1
  5. @echo %%~fa
  6. call rename "%%a" "img_%%i%%.jpg"
  7. )
复制代码
1

评分人数

活着就是为了改变世界

TOP

返回列表