[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] 批处理如何将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: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

TOP

本帖最后由 523066680 于 2012-12-26 21:53 编辑

回复 2# 宫商角徵羽


比如2和13
作为字符判断的时候,2 是在13前面的。字符判断是从前面到后面逐个对比大小的,而不是整体数字。


写了一个,请把Names.Txt、批处理脚本 和音乐文件放在同一个目录。
  1. @echo off &setlocal enabledelayedexpansion
  2. set /a n=0
  3. for /f %%a in (Names.Txt) do (
  4. set /a n+=1
  5. ren "单词 (!n!).mp3" "%%a.mp3"
  6. )
  7. pause
复制代码
看看显示的是不是符合要求,没问题的话就把echo去掉再执行。
未考虑各种特殊情况,操作前请自行备份。

TOP

本帖最后由 宫商角徵羽 于 2012-12-26 23:00 编辑

回复 3# 523066680

恩,这个代码本身没有问题。  

只是我遇到的情况好像没这么简单,可能问题就出在这个字符判断上了吧。

原本文件名是1-100,数字不连续,中间有缺失,所以我就把它们在Windows文件夹下重命名了,又做成了如上所说的连续的Txt文本,不过这样一来原本的文件顺序就改变了,直接导致文件顺序与单词表顺序不匹配。

也就是说  set /a n+=1 (用于连续递增的文件名,而我当下面临的是有缺失的递增文件名)

所以我现在考虑Dir后的文件名通过比较文件名大小来实现顺序匹配。。。。(当然是非字符判断下,真实的大小)。。。。

不好意思,之前没有讲清楚。
可能,现在也没讲清楚吧。。。。不知大家能不能理解。。。。

TOP

那你郁闷咯……   复制的源还在不在? 再来一次呗

TOP

回复 5# 523066680


昨天熄灯了,早起来回复。

恩,备份是肯定了的,不过思路还在继续探索中•••••

有人说用补位可以解决dir排序问题,我觉得不错(不过要修改文件名)  不知道还有没有更好地解决方案?

对于我的文件名不连续的情况下批处理,也是想请教更好地解决方案,••••••好吧我承认自己有点技术强迫症•••••

TOP

本帖最后由 523066680 于 2012-12-27 09:24 编辑

回复 6# 宫商角徵羽


如果是我遇到这种好像有序但是中间又节外生枝的事情就弄个excel表格一列文件名,一列名单
不对的部分复制移动一下,中间修改一下。改好后前面加一列ren命令  复制出来到.bat  双击执行

ren1.jpg测试.jpg
ren2.jpg功夫.jpg
ren3.jpg不好.jpg
ren4.jpg不要.jpg
ren5.jpg大力.jpg
ren6.jpg后.jpg
ren7.jpg面.jpg
ren8.jpg你.jpg
ren9.jpg懂.jpg
ren10.jpg的.jpg
ren11.jpg词穷.jpg
ren12.jpg了.jpg
  1. ren 1.jpg 测试.jpg
  2. ren 2.jpg 功夫.jpg
  3. ren 3.jpg 不好.jpg
  4. ren 4.jpg 不要.jpg
  5. ren 5.jpg 大力.jpg
  6. ren 6.jpg 后.jpg
  7. ren 7.jpg 面.jpg
  8. ren 8.jpg 你.jpg
  9. ren 9.jpg 懂.jpg
  10. ren 10.jpg 的.jpg
  11. ren 11.jpg 词穷.jpg
  12. ren 12.jpg 了.jpg
复制代码

TOP

回复 7# 523066680


    目前,我也是用这样的方法弄的,不过,感觉有点像笨法子一样,  所以没敢声张,见到高手也这样弄,心里平衡多了,呵呵

   不过,继续探索中。。。。。,谁让我懒嘞!!

TOP

回复 8# 宫商角徵羽


    你的需求看起来有点乱,能否重新整理一下更新到顶楼?我帮你用BAT搞定,让Excel一边凉快去吧

TOP

回复 9# BAT-VBS

恩,问题已经重新编写!   

我帮你用BAT搞定,让Excel一边凉快去吧
有没没感觉这句话很酷呢?呵呵呵

TOP

回复  BAT-VBS

恩,问题已经重新编写!   

有没没感觉这句话很酷呢?呵呵呵
宫商角徵羽 发表于 2012-12-27 10:33


虽不明,但觉厉

TOP

回复 10# 宫商角徵羽


先解决“衍生问题”上面的内容:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set n=0
  4. for /f "delims=" %%a in ('dir /b *.mp3') do (
  5.     if !n! equ 0 (
  6.         set skip=
  7.     ) else (
  8.         set "skip=skip=!n!"
  9.     )
  10.     call :ChangeName "%%a" "!skip!"
  11.     set /a n+=1
  12. )
  13. goto :eof
  14. :ChangeName
  15. for /f "%~2 delims=" %%b in (Names.txt) do (
  16.     ren %1 "%%b.mp3"
  17.     goto :eof
  18. )
复制代码

TOP

本帖最后由 terse 于 2012-12-27 20:30 编辑

能确定文件名序号前含有空格的话 试下这个(补位的)
貌似楼上的并没有先排序撒
  1. @echo off&setlocal enabledelayedexpansion
  2. if "%~1"=="" (
  3.    for /f "tokens=*" %%i in (Names.txt) do set /a n+=1&set _!N!=%%i
  4.    for /f "tokens=2 delims=:" %%i in ('%~s0 $^|sort') do (
  5.        set /a M+=1
  6.        for %%j in (!M!) do echo ren %%i "!_%%j!%%~xi"
  7.    )
  8.    pause&exit
  9. ) else for /f "tokens=*" %%i in ('dir /b *.mp3') do (
  10.         for /f "tokens=1*" %%j in ("%%~ni") do set "s=       %%k"
  11.         echo;!s:~-8!:"%%i"
  12. )
复制代码

TOP

本帖最后由 batman 于 2012-12-28 11:02 编辑
  1. @echo off&setlocal enabledelayedexpansion
  2. set "max=mp3文件中最大的编号,你懂的。。。"
  3. for /f "delims=" %%a in (names.txt) do set /a n+=1&set "_!n!=%%a"
  4. set /a n=0
  5. for /l %%a in (1,1,%max%) do (
  6.   set /a a=%%a
  7.   if %%a lss 10 set "a=0!a!"
  8.   if exist "marker !a!.mp3" (
  9.     set /a n+=1
  10.     for %%b in (!n!) do ren "marker !a!.mp3" "!_%%b!.mp3"
  11.   )
  12. )
复制代码
***共同提高***

TOP

回复 12# BAT-VBS
就像13所说的排序出现错误。。。不过谢谢你的思路。。。继续期待。。。。

TOP

返回列表