Board logo

标题: [文件操作] 批量修改多个文件夹下所有文件的名称 [打印本页]

作者: forever1314    时间: 2022-3-12 13:23     标题: 批量修改多个文件夹下所有文件的名称

一键修改多个文件夹中的文件名与文件夹名一致,如文件夹内有多个文件,则在名称后按数字排序
作者: 求知路漫漫    时间: 2022-3-12 15:35

  1. @echo off
  2. set /a num=1
  3. setlocal enabledelayedexpansion
  4. for /f "delims=" %%i in ('dir /s  /b "%~1\"') do ren "%%~i" "%~n1!num!%%~xi" & set /a num+=1
  5. pause
  6. pause
复制代码
在没有嵌套文件夹时可用,直接把文件夹拖到bat上即可
作者: forever1314    时间: 2022-3-12 15:57

这个只能一个一个拖么,有没有更方便一点的呢,谢谢
作者: 求知路漫漫    时间: 2022-3-13 01:44

本帖最后由 求知路漫漫 于 2022-3-13 02:06 编辑
  1. @echo on
  2. set oldname=?
  3. set newname=?
  4. set num=0
  5. setlocal enabledelayedexpansion
  6. for /f "delims=" %%a in ('dir /a-d /s  /b "%~1"') do (
  7. set f=%%~a
  8. set h=%%~xa
  9. set d=%%~dpa
  10. set s=%%~pa
  11. set s=!s:~0,-1!
  12. call :t "!s!"
  13. :here
  14. echo.
  15. (if "!newname!" equ "!oldnanme!" (
  16. :rename1
  17. set /a num+=1
  18. if exist "!d!!newname!!num!!h!" (call :rename1) else (
  19. ren "!f!" "!newname!!num!!h!"
  20. )
  21. ) else (
  22. set /a num=0
  23. :rename2
  24. set /a num+=1
  25. if exist "!d!!newname!!num!!h!" (call :rename2 ) else (
  26. ren "!f!" "!newname!!num!!h!"
  27. set "oldname=!newname!"
  28. )
  29. )
  30. )
  31. )
  32. goto :eof
  33. :t
  34. set "newname=%~n1"
  35. goto :eof
复制代码

作者: 求知路漫漫    时间: 2022-3-13 01:56

本帖最后由 求知路漫漫 于 2022-3-13 02:02 编辑

上一楼的代码可以支持嵌套多层文件夹,只需要把最外层文件夹拖到bat上即可。有一个bug暂时无法处理,希望有高手可以指点。举例:如果其中某个文件夹为cc,里面有个文件名称又恰好是cc1,大概率会导致此文件夹内的文件名称序号不是从1开始。
同时还有疑问,虽然不影响程序功能,但是实在不甘心,望大佬解惑。
一、14行的空行不能删除,删除会报语法错误,程序闪退,但是,可以换成任意回显,实在不可理解。
二、32行必须存在,神奇的地方




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2