标题: [文本处理] 【已解决】批处理怎样根据原文件名中的数字大小重命名图片? [打印本页]
作者: wpy4206 时间: 2011-11-10 11:54 标题: 【已解决】批处理怎样根据原文件名中的数字大小重命名图片?
本帖最后由 pcl_test 于 2017-6-6 19:05 编辑
转换前 转换后
一级目录 二级目录 图片名称 一级目录 二级目录 图片名称
aaa aaa
42 42
4201#0.1.jpg ——>>> 有变化 4201#4.jpg
4201#0.2.jpg ——>>> 有变化 4201#5.jpg
4201#1.jpg ——>>> 4201#1.jpg
4201#2.jpg ——>>> 4201#2.jpg
4201#3.jpg ——>>> 4201#3.jpg
4201#4.jpg ——>>> 4201#4.jpg
…… ——>>>
42 ——>>> 42
4202#0.1.jpg ——>>> 有变化 4202#7.jpg
4202#1.jpg ——>>> 4202#1.jpg
4202#2.jpg ——>>> 4202#2.jpg
4202#3.jpg ——>>> 4202#3.jpg
4202#3.1.jpg ——>>> 有变化 4202#4.jpg
4202#3.2.jpg ——>>> 有变化 4202#5.jpg
4202#4.jpg ——>>> 有变化 4202#6.jpg
…… ——>>>
42 ——>>> 42
4203#0.jpg ——>>> 有变化 4203#6.jpg
4203#1.jpg ——>>> 4203#1.jpg
4203#2.jpg ——>>> 4203#2.jpg
4203#3.jpg ——>>> 4203#3.jpg
4203#4.jpg ——>>> 4203#4.jpg
4203#5.jpg ——>>> 4203#5.jpg
…… ——>>>
42 ——>>> 42
4204#1.jpg ——>>> 4204#1.jpg
4204#2.jpg ——>>> 4204#2.jpg
4204#3.jpg ——>>> 4204#3.jpg
4204#4.jpg ——>>> 4204#4.jpg
…… ——>>> ……
说明:
1、文件的名称基本由大于1的数字和小于1的数字组成。
2、排序的原则大于1的顺排,比如原来4202中的1还是1,原来的3.1变成了4等依次顺排。
3、小于1的依次顺排,比如原来的4201中的0.1变成了4,0.2变成了5。
4、这都是文件的实际名称,带有#符号
作者: chinatree 时间: 2011-11-10 13:40
菜鸟的我表示还不会.
作者: 小胖狐狸 时间: 2011-11-10 15:09
本帖最后由 小胖狐狸 于 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
复制代码
作者: CrLf 时间: 2011-11-10 16:03
# 后的那个数字会出现大于 9 的情况吗?如果能保证小于 10 (或者小于 100)那就好办了
作者: wpy4206 时间: 2011-11-10 18:09
回复 4# CrLf
恩,基本上都是小于10,有一些文件夹中大于10,不过很少。写脚本的话,小于100就可以了。
作者: CrLf 时间: 2011-11-10 18:26
噢,看错题意,当我没说...
佩服 3 楼的毅力
作者: yyykkkyyyy 时间: 2011-11-10 23:28
在3楼基础上也练手试试,这问题技术上说不上难,但对我等水平来说还是不容易的- @echo off
- rem 批处理放一级目录下、二级目录并排位置运行
- echo 正在处理...
- for /d %%i in (*)do (
- cd "%%i" &echo %%i\ :
- rem =====将文件名赋以固定10位的变量名===========
- setlocal enabledelayedexpansion
- for /f "tokens=1-3* delims=#." %%a in ('dir/b/a-d ????#*.jpg')do (
- set h1=0%%b
- set h1=!h1:~-2!
- if "!h1!"=="00" set "h1=a0"
- if "%%d"=="" (
- set "fn=%%a#%%b.%%c"
- set "h2= 0"
- )else (
- set "fn=%%a#%%b.%%c.%%d"
- set h2=00%%c
- set h2=!h2:~-2!
- )
- set "#%%a#!h1!!h2!=!fn!"
- )
- rem =====排序并重命名==========
- for /f "tokens=1,2* delims=#=" %%a in ('set #')do (
- if not defined ##%%a set ##%%a=y&set/a n=0
- set/a n+=1
- ren %%c %%a#!n!.jpg 2>nul||ren %%c %%a#!n!.jpg.yky
- )
- ren *.yky *. 2>nul
- endlocal
- cd..
- )
- pause
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |