标题: [文件操作] 批处理如何将Txt中的文件名重命名到文件夹的各个文件上(按顺序)? [打印本页]
作者: 宫商角徵羽 时间: 2012-12-26 16:23 标题: 批处理如何将Txt中的文件名重命名到文件夹的各个文件上(按顺序)?
本帖最后由 宫商角徵羽 于 2012-12-27 12:23 编辑
批量按顺序重命名Mp3为文本中的单词
文件名匹配规则:使用左侧Txt列表中的单词顺序对应右边的文件,重命名右边的文件
----------Names.Txt内容----------- --------------文件夹/单词下的Mp3文件---------(编号缺失的Mp3文件)--------------
sincere ------对应-->> Marker 01.mp3
mood ------对应-->> Marker 02.mp3
static ------对应-->> Marker 03.mp3【此处编号由03跳到05,不连续】
senator ------对应-->> Marker 05.mp3
hobby ------对应-->> Marker 06.mp3
lad ------对应-->> Marker 07.mp3
equip .......... Marker 08.mp3【多处数字编号跳跃,也不连续】
frown Marker 10.mp3
....... ...............
....... .................
book Marker 125.mp3【注意此处数字编码有三位数】
....... ...............
....... ...............
-------------------------------------- -----------------------------------------------------
--------------即实现如下规则的重命名----------------------
ren "Marker 01.mp3.mp3" "sincere.mp3"
ren "Marker 02.mp3.mp3" "mood.mp3"
ren "Marker 03.mp3.mp3" "static.mp3"
ren "Marker 05.mp3.mp3" "senator.mp3"
ren "Marker 06.mp3.mp3" "hobby.mp3"
ren "Marker 07.mp3.mp3" "lad.mp3"
ren "Marker 08.mp3.mp3" "equip.mp3"
ren "Marker 10.mp3.mp3" "frown.mp3"
。。。。。
ren "Marker 125.mp3.mp3" "book.mp3"
-------------------------------------------------------------------
--------------------------------【以下是衍生问题】------------------------------
由于Dir /on 排序有问题(如word (10).mp3会排在word (2).mp3前面)
因此不能匹配Txt中的单词顺序,所以产生了如下困扰
--------------如下MP3文件名又何实现呢----------(带括号,数字位数也不相同的MP3files)--------------
ren "Wordlist (1).mp3" "sincere.mp3"【这里Mp3是Win重命名的文件名格式,带括号,数字位数也不相同】
ren "Wordlist (2).mp3" "mood.mp3"
ren "Wordlist (3).mp3" "static.mp3"
ren "Wordlist (4).mp3" "senator.mp3"
ren "Wordlist (5).mp3" "hobby.mp3"
ren "Wordlist (6).mp3" "lad.mp3"
ren "Wordlist (7).mp3" "equip.mp3"
ren "Wordlist (8).mp3" "frown.mp3"
ren "Wordlist (9).mp3" "fasten.mp3"
ren "Wordlist (10).mp3" "software.mp3"
。。。。。。。。
------------------------------------------------------------------
作者: 宫商角徵羽 时间: 2012-12-26 20:56
本帖最后由 宫商角徵羽 于 2012-12-26 20:57 编辑
为什么 Dir /on 后显示的结果却是:
单词 (1).mp3 这里却不是按顺序呢?
单词 (10).mp3
单词 (11).mp3
单词 (12).mp3
单词 (13).mp3
单词 (14).mp3
单词 (15).mp3
单词 (16).mp3
单词 (17).mp3
单词 (18).mp3
单词 (19).mp3
单词 (2).mp3 这里却不是按顺序呢?
单词 (20).mp3
单词 (21).mp3
单词 (22).mp3
单词 (23).mp3
单词 (24).mp3
单词 (25).mp3
单词 (26).mp3
单词 (27).mp3
单词 (28).mp3
单词 (29).mp3
单词 (3).mp3 这里却不是按顺序呢?
单词 (30).mp3
单词 (31).mp3
单词 (32).mp3
单词 (33).mp3
作者: 523066680 时间: 2012-12-26 21:38
本帖最后由 523066680 于 2012-12-26 21:53 编辑
回复 2# 宫商角徵羽
比如2和13
作为字符判断的时候,2 是在13前面的。字符判断是从前面到后面逐个对比大小的,而不是整体数字。
写了一个,请把Names.Txt、批处理脚本 和音乐文件放在同一个目录。- @echo off &setlocal enabledelayedexpansion
- set /a n=0
- for /f %%a in (Names.Txt) do (
- set /a n+=1
- ren "单词 (!n!).mp3" "%%a.mp3"
- )
- pause
复制代码
看看显示的是不是符合要求,没问题的话就把echo去掉再执行。
未考虑各种特殊情况,操作前请自行备份。
作者: 宫商角徵羽 时间: 2012-12-26 22:57
本帖最后由 宫商角徵羽 于 2012-12-26 23:00 编辑
回复 3# 523066680
恩,这个代码本身没有问题。
只是我遇到的情况好像没这么简单,可能问题就出在这个字符判断上了吧。
原本文件名是1-100,数字不连续,中间有缺失,所以我就把它们在Windows文件夹下重命名了,又做成了如上所说的连续的Txt文本,不过这样一来原本的文件顺序就改变了,直接导致文件顺序与单词表顺序不匹配。
也就是说 set /a n+=1 (用于连续递增的文件名,而我当下面临的是有缺失的递增文件名)
所以我现在考虑Dir后的文件名通过比较文件名大小来实现顺序匹配。。。。(当然是非字符判断下,真实的大小)。。。。
不好意思,之前没有讲清楚。
可能,现在也没讲清楚吧。。。。不知大家能不能理解。。。。
作者: 523066680 时间: 2012-12-26 23:10
那你郁闷咯…… 复制的源还在不在? 再来一次呗
作者: 宫商角徵羽 时间: 2012-12-27 07:40
回复 5# 523066680
昨天熄灯了,早起来回复。
恩,备份是肯定了的,不过思路还在继续探索中•••••
有人说用补位可以解决dir排序问题,我觉得不错(不过要修改文件名) 不知道还有没有更好地解决方案?
对于我的文件名不连续的情况下批处理,也是想请教更好地解决方案,••••••好吧我承认自己有点技术强迫症•••••
作者: 523066680 时间: 2012-12-27 09:12
本帖最后由 523066680 于 2012-12-27 09:24 编辑
回复 6# 宫商角徵羽
如果是我遇到这种好像有序但是中间又节外生枝的事情就弄个excel表格一列文件名,一列名单
不对的部分复制移动一下,中间修改一下。改好后前面加一列ren命令 复制出来到.bat 双击执行
ren | 1.jpg | 测试.jpg |
ren | 2.jpg | 功夫.jpg |
ren | 3.jpg | 不好.jpg |
ren | 4.jpg | 不要.jpg |
ren | 5.jpg | 大力.jpg |
ren | 6.jpg | 后.jpg |
ren | 7.jpg | 面.jpg |
ren | 8.jpg | 你.jpg |
ren | 9.jpg | 懂.jpg |
ren | 10.jpg | 的.jpg |
ren | 11.jpg | 词穷.jpg |
ren | 12.jpg | 了.jpg |
- ren 1.jpg 测试.jpg
- ren 2.jpg 功夫.jpg
- ren 3.jpg 不好.jpg
- ren 4.jpg 不要.jpg
- ren 5.jpg 大力.jpg
- ren 6.jpg 后.jpg
- ren 7.jpg 面.jpg
- ren 8.jpg 你.jpg
- ren 9.jpg 懂.jpg
- ren 10.jpg 的.jpg
- ren 11.jpg 词穷.jpg
- ren 12.jpg 了.jpg
复制代码
作者: 宫商角徵羽 时间: 2012-12-27 09:47
回复 7# 523066680
目前,我也是用这样的方法弄的,不过,感觉有点像笨法子一样, 所以没敢声张,见到高手也这样弄,心里平衡多了,呵呵
不过,继续探索中。。。。。,谁让我懒嘞!!
作者: BAT-VBS 时间: 2012-12-27 10:00
回复 8# 宫商角徵羽
你的需求看起来有点乱,能否重新整理一下更新到顶楼?我帮你用BAT搞定,让Excel一边凉快去吧
作者: 宫商角徵羽 时间: 2012-12-27 10:33
回复 9# BAT-VBS
恩,问题已经重新编写!
有没没感觉这句话很酷呢?呵呵呵
作者: 523066680 时间: 2012-12-27 10:58
回复 BAT-VBS
恩,问题已经重新编写!
有没没感觉这句话很酷呢?呵呵呵
宫商角徵羽 发表于 2012-12-27 10:33
虽不明,但觉厉
作者: BAT-VBS 时间: 2012-12-27 17:27
回复 10# 宫商角徵羽
先解决“衍生问题”上面的内容:- @echo off
- setlocal enabledelayedexpansion
- set n=0
- for /f "delims=" %%a in ('dir /b *.mp3') do (
- if !n! equ 0 (
- set skip=
- ) else (
- set "skip=skip=!n!"
- )
- call :ChangeName "%%a" "!skip!"
- set /a n+=1
- )
- goto :eof
-
- :ChangeName
- for /f "%~2 delims=" %%b in (Names.txt) do (
- ren %1 "%%b.mp3"
- goto :eof
- )
复制代码
作者: terse 时间: 2012-12-27 20:28
本帖最后由 terse 于 2012-12-27 20:30 编辑
能确定文件名序号前含有空格的话 试下这个(补位的)
貌似楼上的并没有先排序撒- @echo off&setlocal enabledelayedexpansion
- if "%~1"=="" (
- for /f "tokens=*" %%i in (Names.txt) do set /a n+=1&set _!N!=%%i
- for /f "tokens=2 delims=:" %%i in ('%~s0 $^|sort') do (
- set /a M+=1
- for %%j in (!M!) do echo ren %%i "!_%%j!%%~xi"
- )
- pause&exit
- ) else for /f "tokens=*" %%i in ('dir /b *.mp3') do (
- for /f "tokens=1*" %%j in ("%%~ni") do set "s= %%k"
- echo;!s:~-8!:"%%i"
- )
复制代码
作者: batman 时间: 2012-12-27 22:49
本帖最后由 batman 于 2012-12-28 11:02 编辑
- @echo off&setlocal enabledelayedexpansion
- set "max=mp3文件中最大的编号,你懂的。。。"
- for /f "delims=" %%a in (names.txt) do set /a n+=1&set "_!n!=%%a"
- set /a n=0
- for /l %%a in (1,1,%max%) do (
- set /a a=%%a
- if %%a lss 10 set "a=0!a!"
- if exist "marker !a!.mp3" (
- set /a n+=1
- for %%b in (!n!) do ren "marker !a!.mp3" "!_%%b!.mp3"
- )
- )
复制代码
作者: 宫商角徵羽 时间: 2012-12-28 10:56
回复 12# BAT-VBS
就像13所说的排序出现错误。。。不过谢谢你的思路。。。继续期待。。。。
作者: 宫商角徵羽 时间: 2012-12-28 11:00
回复 14# batman
已经填写了最大文件名,也将代码中的"mark !a!.mp3"部分改回了"Marker !a!.mp3"不过仍然显示: 找不到文件,或文件名重复 错在什么地方呢。。。
作者: batman 时间: 2012-12-28 11:02
回复 16# 宫商角徵羽
再试,已修改
作者: 宫商角徵羽 时间: 2012-12-28 11:02
本帖最后由 宫商角徵羽 于 2012-12-28 11:03 编辑
回复 13# terse
13楼正解,虽然是生成Ren 列表,您老人家喝口水休息一下,剩下的交给我吧。。。呵呵。。。。。
多谢!!!(感觉还是生成Ren列表好,保险)
作者: 523066680 时间: 2012-12-28 11:12
楼主的情况我懂,所以我没有继续写代码了……
作者: 宫商角徵羽 时间: 2012-12-28 13:35
本帖最后由 宫商角徵羽 于 2012-12-28 13:44 编辑
回复 14# batman
感谢贴:batman成功的如春风般送来了正确解答,宫商角徵羽感谢他/她
请教一下, 第四行:在批处理中变量的初值是不是“0”?
为什么要特别赋值,或者前后是修改有何高见?
作者: 宫商角徵羽 时间: 2012-12-28 13:38
回复 19# 523066680
恩,你能抽出时间来给我解答,我就已经很感谢了。
!!!不要内疚!!!呵呵呵 多谢!!
作者: BAT-VBS 时间: 2012-12-28 20:48
回复 20# 宫商角徵羽
第三行执行过后,n已经不是0了
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |