Board logo

标题: [文件操作] [已解决]批处理重命名文件名+1的形式 [打印本页]

作者: xjhbbs    时间: 2021-5-6 10:12     标题: [已解决]批处理重命名文件名+1的形式

请教大神,当碰到有重名的,就会把重名文件变成1.doc, 我想改下,当碰到有重名时,改成文件名+1, 比如我要转换的原文件名是:测试.docx, 当碰到有重名时,转换后会变成:测试1.doc,如果已经有: 测试1.doc文件,那么就会自动再加1,变成: 测试2.doc。 原文件名不变的情况下+1。。现在是直接把原文件名给改了。变成1.doc,2.doc了。
作者: xp3000    时间: 2021-5-6 10:39

倒数第三行ren %1 %filename%.doc改为ren %1 测试%filename%.doc是不是你想要的
作者: xjhbbs    时间: 2021-5-6 10:43

回复 2# xp3000


    不是固定 测试,是跟据我原文件名自动+1, 当有重名时,在原文件名后面自动+1
作者: qixiaobin0715    时间: 2021-5-6 10:57

本帖最后由 qixiaobin0715 于 2021-5-6 11:00 编辑


set /a filename+=1
改为
set /a n+=1
set filename=!filename!!n!
goto :loop
)
set n=0
行吗?
作者: Batcher    时间: 2021-5-6 11:07

回复 1# xjhbbs


参考:批处理复制或重命名文件的时候对重复文件依次添加数字序号
http://bbs.bathome.net/thread-11423-1-1.html#pid72681
http://bbs.bathome.net/thread-9355-1-1.html#pid60783
http://bbs.bathome.net/thread-9355-1-1.html#pid60621
作者: cutebe    时间: 2021-5-6 11:15

要识别原有数字估计得有50行代码
作者: xjhbbs    时间: 2021-5-6 11:31

回复 4# qixiaobin0715


    按你的方法可以大神,不错,是我想要的效果。。不过我的脚本还有个小BUG,就是在运行时,我发现当文件名中间有空格的话,就转换不成功了。
   比如 : 测 试.docx,这样的文件名,中间有一个空格的话,就转换不成功了。。是那里有问题?

作者: cutebe    时间: 2021-5-6 12:07

  1. ::改扩展名.docx为.doc,重名则添加/修改数字后缀。
  2. @echo off
  3. setlocal enableDelayedExpansion
  4. for /f "delims=" %%i in ('dir /b/a-d/s *.docx')do (
  5. if exist "%%~dpni.doc" (
  6. call :docx2doc docName "%%i"
  7. ren "%%i" "!docName!"
  8. )else ren "%%i" "%%~ni.doc"
  9. )
  10. goto :eof
  11. ::====完====
  12. :docx2doc docName docxPath
  13. setlocal
  14. pushd %~dp2
  15. set/am=1,@2=1
  16. for /l %%n in (0 1 9)do set _%%n=%%n
  17. set "strNum=%~n2"
  18. :numlp ::取末尾数字
  19. if defined _%strNum:~-1% (
  20. set/aLen+=1,m*=10
  21. set n=%strNum:~-1%%n%
  22. set strNum=%strNum:~,-1%
  23. goto :numlp
  24. )
  25. if "%Len%"=="" set/a num1=Len=1&goto :nend
  26. :nnext
  27. set/an1=1%n%+1
  28. set/ah=n1/m
  29. set num1=!@%h%!!n1:~-%Len%!
  30. if "%h%"==2 set/aLen+=1,m*=10
  31. :nend
  32. set "fName=%strNum%%num1%.doc"
  33. if exist "%fName%" set n=%num1%&goto :nnext
  34. popd
  35. endlocal&set "%1=%fName%"
  36. goto :eof
复制代码

作者: 1152    时间: 2021-5-6 12:17

回复 7# xjhbbs


    那么代码就要加上英文引号。
作者: qixiaobin0715    时间: 2021-5-6 12:37

回复 7# xjhbbs
ren "%1" "%filename%.doc"
作者: xjhbbs    时间: 2021-5-6 15:00

回复 9# 1152


    谢谢
作者: xjhbbs    时间: 2021-5-6 15:00

回复 10# qixiaobin0715


    谢谢
作者: qixiaobin0715    时间: 2021-5-6 17:27

回复 1# xjhbbs
问题解决后,最好不要编辑顶楼帖子,便于有相似需求的人作为参考。
作者: qixiaobin0715    时间: 2021-5-6 17:30

回复 6# cutebe
应当不会那么复杂,以前好像写过类似代码,20行左右。
作者: 1152    时间: 2021-5-6 17:36

回复 11# xjhbbs


    http://www.bathome.net/thread-58507-1-1.html
    帮帮忙
作者: qixiaobin0715    时间: 2021-5-7 09:48

像这种修改文件名出现重名问题,我的经验是最好避免使用ren命令,很麻烦的。可以换一个思路,使用copy,将文件拷贝的同时修改文件名,可以节省代码,并且保留原文件,这样即使代码错误修改了文件名,也无关大局,还有备份文件可用。




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