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

[文件操作] [已解决]批处理重命名文件名+1的形式

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

倒数第三行ren %1 %filename%.doc改为ren %1 测试%filename%.doc是不是你想要的

TOP

回复 2# xp3000


    不是固定 测试,是跟据我原文件名自动+1, 当有重名时,在原文件名后面自动+1

TOP

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


set /a filename+=1
改为
set /a n+=1
set filename=!filename!!n!
goto :loop
)
set n=0
行吗?
1

评分人数

TOP

回复 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
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

要识别原有数字估计得有50行代码
如无特别说明,代码测试环境均为 XP SP3

TOP

回复 4# qixiaobin0715


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

TOP

  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
复制代码
1

评分人数

如无特别说明,代码测试环境均为 XP SP3

TOP

回复 7# xjhbbs


    那么代码就要加上英文引号。
1

评分人数

TOP

回复 7# xjhbbs
ren "%1" "%filename%.doc"
1

评分人数

TOP

回复 9# 1152


    谢谢

TOP

回复 10# qixiaobin0715


    谢谢

TOP

回复 1# xjhbbs
问题解决后,最好不要编辑顶楼帖子,便于有相似需求的人作为参考。

TOP

回复 6# cutebe
应当不会那么复杂,以前好像写过类似代码,20行左右。

TOP

回复 11# xjhbbs


    http://www.bathome.net/thread-58507-1-1.html
    帮帮忙

TOP

返回列表