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

[文件操作] [已解决]BAT怎样用id3tool把歌曲按歌手专辑分类(应该挺难)?

本帖最后由 batsealine 于 2013-1-30 16:02 编辑

歌曲的id3信息分v1和v2两种,id3tool只能改变id3v1信息,而我们直接进入歌曲属性改信息是改变的是v2。所幸一般的歌曲同时带有v1、v2信息,现在我想用id3tool读取信息,生成歌手文件夹,再在歌手文件夹内生成对应专辑的文件夹,最后按条件移动歌曲。
现给出id3tool的帮助信息
  1. usage:
  2. id3tool [<options>] <filename>
  3.    -t, --set-title=WORD          Sets the title to WORD
  4.    -a, --set-album=WORD          Sets the album to WORD
  5.    -r, --set-artist=WORD         Sets the artist to WORD
  6.    -y, --set-year=YEAR           Sets the year to YEAR [4 digits]
  7.    -n, --set-note=WORD           Sets the note to WORD
  8.    -g, --set-genre=INT           Sets the genre code to INT
  9.    -G, --set-genre-word=WORD     Sets the genre to WORD
  10.    -c, --set-track=INT           Sets the track number to INT
  11.    -l, --genre-list              Shows the Genre's and their codes
  12.    -v, --version                 Displays the version
  13.    -h, --help                    Displays this message
  14. 批量修改:for /f "delims=" %%i in ('dir /b *.mp3') do id3tool.exe -a nihao "%%~nxi"
  15. 提取信息:id3tool  "filename“
  16. 下载地址:http://nekohako.xware.cx/id3tool/id3tool-1.2a-win32-x86.zip
复制代码
1

评分人数

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

本帖最后由 hankerer 于 2013-1-28 13:24 编辑
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f %%i in ('dir /a-d /b *.mp3') do (
  4. for /f "tokens=1,*" %%j in ('id3tool "%%i" ^| findstr "Artist" ') do (
  5. set "artist=%%k"
  6. set "artist=!artist: =!"
  7. (for /f "delims=" %%m in ('dir /ad /b^|findstr "!artist!" ') do (
  8. cd "!artist!" & call :checkAlbum %%i
  9. ) ) || (
  10. mkdir "!artist!"
  11. cd "!artist!"
  12. call :checkAlbum %%i
  13. )
  14. cd ..\
  15. )
  16. )
  17. pause
  18. goto :eof
  19. :checkAlbum
  20. for /f "tokens=1,*" %%p in ('..\id3tool "..\%1" ^| findstr "Album" ') do (
  21. set "album=%%q"
  22. set "album=!album: =!"
  23. (for /f "delims=" %%m in ('dir /ad /b^|findstr "!album!" ') do (
  24. cd "!album!"
  25. copy "..\..\%1" . >nul
  26. )) || (
  27. mkdir "!album!"
  28. cd "!album!"
  29. copy "..\..\%1" . >nul
  30. )
  31. cd ..\
  32. )
  33. goto :eof
复制代码
我写的够啰嗦的
1

评分人数

TOP

回复 2# hankerer


    厉害厉害!!不过歌名中好像不能有空格,所以对英文歌就全部失效。另外如果想要移动歌曲而不是复制歌曲该怎样改,我直接将后面两个copy改成move好像不行。

TOP

回复 3# batsealine

因为你那个工具出来的信息都在后面加了一串空格,所以我就把空格全过滤了,因此出现了有空格就不行的现象. 不太好搞.有其他高手写个码让我学习一下?

TOP

不确定你的需求  先 ECHO
  1. @echo off&setlocal EnableDelayedExpansion
  2. for /f "tokens=1,*" %%i in ('id3tool *.mp3^|findstr /ib "Filename: Artist: Album:"') do (
  3.     if /i "%%i" == "Album:" if "!name!" == "Artist:"  if "!name1!" ==  "Filename:" (
  4.       md "!Artist:!\%%~nxj\" 2>nul
  5.       echo move "!Filename:!" "!Artist:!\%%~nxj\"
  6.     )
  7.      set "name1=!name!"
  8.      set "name=%%i"
  9.      set "%%i=%%~nxj"
  10. )
  11. pause
复制代码
1

评分人数

TOP

回复 5# terse


    你的批处理堪称完美啊!去掉那个echo就可以用了。
只是还想问一下findstr后的/ib有什么妙用,如何来干净的截取到输出信息中的有用部分?

TOP

本帖最后由 hankerer 于 2013-1-29 09:27 编辑

回复 5# terse


%%~nxj

原来如此。这样就可以把尾巴上的空格都去掉了。


set "%%i=%%~nxj"
这句太妙了。

TOP

返回列表