找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 25041|回复: 6

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

[复制链接]
发表于 2013-1-28 10:36:59 | 显示全部楼层 |阅读模式
本帖最后由 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
复制代码

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2013-1-28 13:09:41 | 显示全部楼层
本帖最后由 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技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2013-1-28 19:32:32 | 显示全部楼层
回复 2# hankerer


    厉害厉害!!不过歌名中好像不能有空格,所以对英文歌就全部失效。另外如果想要移动歌曲而不是复制歌曲该怎样改,我直接将后面两个copy改成move好像不行。
发表于 2013-1-28 20:20:39 | 显示全部楼层
回复 3# batsealine

因为你那个工具出来的信息都在后面加了一串空格,所以我就把空格全过滤了,因此出现了有空格就不行的现象. 不太好搞.有其他高手写个码让我学习一下?
发表于 2013-1-28 22:23:57 | 显示全部楼层
不确定你的需求  先 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技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2013-1-28 23:55:58 | 显示全部楼层
回复 5# terse


    你的批处理堪称完美啊!去掉那个echo就可以用了。
只是还想问一下findstr后的/ib有什么妙用,如何来干净的截取到输出信息中的有用部分?
发表于 2013-1-29 09:17:48 | 显示全部楼层
本帖最后由 hankerer 于 2013-1-29 09:27 编辑

回复 5# terse


%%~nxj

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


set "%%i=%%~nxj"
这句太妙了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 03:15 , Processed in 0.021542 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表