标题: [文件操作] [已解决]批处理重命名文件名+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
- ::改扩展名.docx为.doc,重名则添加/修改数字后缀。
- @echo off
- setlocal enableDelayedExpansion
- for /f "delims=" %%i in ('dir /b/a-d/s *.docx')do (
- if exist "%%~dpni.doc" (
- call :docx2doc docName "%%i"
- ren "%%i" "!docName!"
- )else ren "%%i" "%%~ni.doc"
- )
- goto :eof
- ::====完====
-
- :docx2doc docName docxPath
- setlocal
- pushd %~dp2
- set/am=1,@2=1
- for /l %%n in (0 1 9)do set _%%n=%%n
- set "strNum=%~n2"
- :numlp ::取末尾数字
- if defined _%strNum:~-1% (
- set/aLen+=1,m*=10
- set n=%strNum:~-1%%n%
- set strNum=%strNum:~,-1%
- goto :numlp
- )
- if "%Len%"=="" set/a num1=Len=1&goto :nend
- :nnext
- set/an1=1%n%+1
- set/ah=n1/m
- set num1=!@%h%!!n1:~-%Len%!
- if "%h%"==2 set/aLen+=1,m*=10
- :nend
- set "fName=%strNum%%num1%.doc"
- if exist "%fName%" set n=%num1%&goto :nnext
- popd
- endlocal&set "%1=%fName%"
- 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 |