本帖最后由 小胖狐狸 于 2011-11-10 16:40 编辑
回复 1# wpy4206
新手练手,我的失败过程也没有删掉,我的检验代码也都留在里面,仅供参考 (我的filelist.txt)是楼主贴出内容中手动删除了一些行后,每行都是旧文件名、新文件名这样子
我的想法是先将文件名#后面的数字小于等于0的,前面加点东西,让他排到1,2,3,4……的后面去,方便之后的顺序重命名
首先我想的是0.1加到1000.1,结果发现1000.1虽然在1的后面,却排在2的前面,遂更改为加字母:0.1 → a0.1,实现了默认排序满足楼主需求
然后就是比较文件名中#前的部分后后面的部分了
如果看得乱,请自行删除rem开头的行,哈哈 :)- @echo off&setlocal enabledelayedexpansion
- rem 清除001下所有文件
- del .\filelist1\001\*.* /Q
- rem 通过文件列表filelist1.txt,在001下新建模拟文件待重命名
- for /f "tokens=1 delims= " %%i in (filelist1.txt) do echo.>.\filelist1\001\%%i
- pause
-
-
- cls
- set name=
- set num=0
- rem 将文件名#后面部分数值小于等于0的全部加1000后重命名,方便总体更名排序
- rem 上一行所提方案有误:1000会排在1的后面,2的前面,汗~
- rem 新方案:修改将文件名#后面部分数值小于等于0的全部前加字母a后重命名
- for /f "delims=j# tokens=1,2" %%i in ('dir .\filelist1\001\ /B^|find "#0."') do (
- rem for /f "delims=j# tokens=1,2" %%i in ('dir .\filelist1\001\ /B^|find "#1000."') do ( 方案有误,前加1000排序乱了,此行修改
- set name1=%%i
- set name2=%%j
- rem ren .\filelist1\001\!name1!#!name2!jpg !name1!#a!name2:~3!jpg 方案有误,前加1000排序乱了,此行修改
- ren .\filelist1\001\!name1!#!name2!jpg !name1!#a!name2!jpg
- )
- pause
-
- rem 开始整体更名,由于更名3.1.jpg为3.jpg时遇到重名导致3.1和3.2失败,但是3.jpg被成功更名为5.jpg顺序无误,遂整体执行两次后完成修改
- call :beginren
- call :beginren
- goto :eof
-
- :beginren
- for /f "delims=j# tokens=1,2" %%i in ('dir .\filelist1\001\ /B') do (
- set name1=%%i
- set name2=%%j
- set shortname=!name2:~,-1!
- set /a num+=1
- echo !name1! !name2:~,-1! !shortname!
- if not !name1!==!name! (echo 前面不等于&set num=1&ren .\filelist1\001\!name1!#!name2!jpg !name1!#!num!.jpg&set name=!name1!) else (echo 前面等于&if not !shortname!==!num! echo 后面不等于&ren .\filelist1\001\!name1!#!name2!jpg !name1!#!num!.jpg&set name=!name1!)
- echo !num! !!name!!
- )
- goto :eof
复制代码
|