找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 79456|回复: 15

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

[复制链接]
发表于 2021-5-6 10:12:08 | 显示全部楼层 |阅读模式
请教大神,当碰到有重名的,就会把重名文件变成1.doc, 我想改下,当碰到有重名时,改成文件名+1, 比如我要转换的原文件名是:测试.docx, 当碰到有重名时,转换后会变成:测试1.doc,如果已经有: 测试1.doc文件,那么就会自动再加1,变成: 测试2.doc。 原文件名不变的情况下+1。。现在是直接把原文件名给改了。变成1.doc,2.doc了。
发表于 2021-5-6 10:39:51 | 显示全部楼层
倒数第三行ren %1 %filename%.doc改为ren %1 测试%filename%.doc是不是你想要的
 楼主| 发表于 2021-5-6 10:43:58 | 显示全部楼层
回复 2# xp3000


    不是固定 测试,是跟据我原文件名自动+1, 当有重名时,在原文件名后面自动+1
发表于 2021-5-6 10:57:58 | 显示全部楼层
本帖最后由 qixiaobin0715 于 2021-5-6 11:00 编辑


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

评分

参与人数 1技术 +1 收起 理由
xjhbbs + 1 可以用

查看全部评分

发表于 2021-5-6 11:07:36 | 显示全部楼层
回复 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
发表于 2021-5-6 11:15:53 | 显示全部楼层
要识别原有数字估计得有50行代码
 楼主| 发表于 2021-5-6 11:31:33 | 显示全部楼层
回复 4# qixiaobin0715


    按你的方法可以大神,不错,是我想要的效果。。不过我的脚本还有个小BUG,就是在运行时,我发现当文件名中间有空格的话,就转换不成功了。
   比如 : 测 试.docx,这样的文件名,中间有一个空格的话,就转换不成功了。。是那里有问题?
发表于 2021-5-6 12:07:52 | 显示全部楼层
  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技术 +1 收起 理由
xjhbbs + 1 谢谢了

查看全部评分

发表于 2021-5-6 12:17:07 | 显示全部楼层
回复 7# xjhbbs


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

评分

参与人数 1技术 +1 收起 理由
xjhbbs + 1 谢谢

查看全部评分

发表于 2021-5-6 12:37:54 | 显示全部楼层
回复 7# xjhbbs
ren "%1" "%filename%.doc"

评分

参与人数 1技术 +1 收起 理由
xjhbbs + 1 谢谢了

查看全部评分

 楼主| 发表于 2021-5-6 15:00:37 | 显示全部楼层
回复 9# 1152


    谢谢
 楼主| 发表于 2021-5-6 15:00:42 | 显示全部楼层
回复 10# qixiaobin0715


    谢谢
发表于 2021-5-6 17:27:26 | 显示全部楼层
回复 1# xjhbbs
问题解决后,最好不要编辑顶楼帖子,便于有相似需求的人作为参考。
发表于 2021-5-6 17:30:26 | 显示全部楼层
回复 6# cutebe
应当不会那么复杂,以前好像写过类似代码,20行左右。
发表于 2021-5-6 17:36:09 | 显示全部楼层
回复 11# xjhbbs


    http://www.bathome.net/thread-58507-1-1.html
    帮帮忙
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 16:05 , Processed in 0.021730 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表