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

[文件操作] [已解决]帮忙写一个可以整理mp3文件到指定文件夹的批处理

首先说明下,我对批处理不是很熟悉,只是个低级的初学者
但是从我所看到的与批处理相关的教程中,我认为批处理可以完成这个任务


具体的任务是这样的
在一个文件夹下(以下简称主文件夹),有大量的mp3或者wma文件,
都是按“歌手 - 歌曲名.扩展名”的行式保存的
为了减少在路径处理上的麻烦,可以减少对路径上的要求,
使用的时候把批处理复制到这个主文件夹下就可以了

运行该批处理后,首先提示输入某个歌手名,如:刘德华
输入后回车,查找当前主文件夹下是否有此“刘德华”子文件夹,
有则进入下一步,否则建立这个“刘德华”子文件夹
然后查找主文件夹(不用查找子文件夹)中文件名包含“刘德华”的mp3和wma文件
并移动(不是复制)到刘德华的子文件夹
结束一次操作
可以选择结束或者经行下一个歌手的操作

具体就是这样,希望那个高手可以完成 谢谢了先

[ 本帖最后由 wujuyema 于 2010-3-7 17:14 编辑 ]
1

评分人数

    • Batcher: 感谢主动给标题标注[已解决]字样PB + 2

  1. @echo off
  2. color 0a
  3. setlocal enabledelayedexpansion
  4. :start
  5. set/p int=请输入歌手名:
  6. if not exist !str! md !str!
  7. for %%a in (mp3,wma) do (
  8.   set _en=%%a
  9.   for /r . %%i in (*.!_en!) do (
  10.     findstr %%~ni && move "%%i" "!str!"
  11.   )
  12. )
  13. cls&echo.&echo.&echo 歌手!str!的歌曲已复制完成!
  14. echo 按任意键重新选择歌手...
  15. set int=
  16. pause>nul&goto start
  17. 代码未经过测试~
复制代码
1

评分人数

TOP

  1. @echo off
  2. set ext=mp3 wma
  3. :input
  4. set /p word=搜索:
  5. cls
  6. set exist=
  7. for %%a in (%ext%) do (
  8.     if exist "*%word%*.%%a" set exist=d
  9. )
  10. if not defined exist (
  11.     echo;不存在含“%word%”的文件名
  12.     echo;
  13.     echo;按任意键返回重新输入...
  14.     pause>nul
  15.     cls
  16.     goto input
  17. )
  18. md "%word%" 2>nul
  19. for %%a in (%ext%) do (
  20.     move "*%word%*.%%a" "%word%" >nul 2>nul
  21. )
  22. echo;整理完成!
  23. echo;
  24. pause
  25. cls
  26. goto input
复制代码
1

评分人数

TOP

刚刚在另一个论坛verybat.org的一个友友w5212帮忙写了一个代码
非常智能化,速度快可以快速建立文件夹并把歌曲转进去
我加了一句"*.lrc"就可以把歌词也顺便复制进去了
顺便谢谢以上俩位友友的帮忙

  1. @echo off&setlocal enabledelayedexpansion
  2. title 音乐自动分类工具
  3. mode con cols=80 lines=6&color 0a
  4. echo 请稍候……
  5. for /f "delims=" %%i in ('dir/s/b/a-d/on "*.mp3" "*.wma"') do (
  6. set /a k+=1)
  7. set /a the=!k!/32&cls
  8. echo                              学而时习之,不亦乐乎!   
  9. echo                                光辉BAT制作……
  10. set/p=开始 <nul
  11. for /f "delims=" %%i in ('dir/s/b/a-d/on "*.mp3" "*.wma"') do (set "c=%%~ni"&set /a yes+=1
  12. for %%a in (@ + - — 、 _ , ^&) do set c=!c:%%a= !
  13. for /f %%j in ("!c!") do (
  14. if not exist "%%j\" (if /i "!a!"=="%%j" (md "%%j"
  15. move/y "%%i" "%%j\"&move/y "!b!" "%%j\"&set b=) else (set b=%%i)) else (move/y "%%i" "%%j\")
  16. set a=%%j)
  17. if !yes!==!the! (set yes=0&set /p=■<nul)
  18. )
  19. echo 结束&pause
复制代码

[ 本帖最后由 wujuyema 于 2010-3-7 17:14 编辑 ]

TOP

  若仅是顶楼的那些要求,则4楼的代码并不适合楼主:当存在多重子文件夹的时候,很有可能导致文件错乱,因为4楼的代码是对所有的子文件夹也起作用的;需要注意的是,4楼的代码还有很多其他多余的动作,比如替换输入字符串中的一些字符,并不刚好适用于楼主的需求——w5212也说了,那个代码是他自己使用的,言外之意,它并不一定适合楼主。

  若仅仅为了满足顶楼的那些需求,另加处理lrc文件,则建议使用如下代码:
  1. @echo off
  2. :Main
  3. cls
  4. set name=
  5. set /p name=请输入歌手的姓名(退出请直接回车):
  6. if not defined name exit
  7. md %name% 2>nul
  8. for %%i in (mp3 wma lrc) do move "*%name%*.%%i" %name% 2>nul
  9. pause
  10. goto Main
复制代码
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

这个很实用!

TOP

返回列表