[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]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"
      。。。。。。。。
------------------------------------------------------------------

回复 20# 宫商角徵羽


    第三行执行过后,n已经不是0了

TOP

回复 19# 523066680


    恩,你能抽出时间来给我解答,我就已经很感谢了。
!!!不要内疚!!!呵呵呵          多谢!!

TOP

本帖最后由 宫商角徵羽 于 2012-12-28 13:44 编辑

回复 14# batman


          感谢贴:batman成功的如春风般送来了正确解答,宫商角徵羽感谢他/她

请教一下,  第四行:在批处理中变量的初值是不是“0”?
                           为什么要特别赋值,或者前后是修改有何高见?

TOP

楼主的情况我懂,所以我没有继续写代码了……

TOP

本帖最后由 宫商角徵羽 于 2012-12-28 11:03 编辑

回复 13# terse


    13楼正解,虽然是生成Ren 列表,您老人家喝口水休息一下,剩下的交给我吧。。。呵呵。。。。。

多谢!!!(感觉还是生成Ren列表好,保险)

TOP

回复 16# 宫商角徵羽


    再试,已修改
***共同提高***

TOP

回复 14# batman


    已经填写了最大文件名,也将代码中的"mark !a!.mp3"部分改回了"Marker !a!.mp3"不过仍然显示: 找不到文件,或文件名重复  错在什么地方呢。。。

TOP

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

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

本帖最后由 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

回复 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

回复  BAT-VBS

恩,问题已经重新编写!   

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


虽不明,但觉厉

TOP

回复 9# BAT-VBS

恩,问题已经重新编写!   

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

TOP

回复 8# 宫商角徵羽


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

TOP

返回列表