标题: [文件操作] [已解决]BAT怎样用id3tool把歌曲按歌手专辑分类(应该挺难)? [打印本页]
作者: batsealine 时间: 2013-1-28 10:36 标题: [已解决]BAT怎样用id3tool把歌曲按歌手专辑分类(应该挺难)?
本帖最后由 batsealine 于 2013-1-30 16:02 编辑
歌曲的id3信息分v1和v2两种,id3tool只能改变id3v1信息,而我们直接进入歌曲属性改信息是改变的是v2。所幸一般的歌曲同时带有v1、v2信息,现在我想用id3tool读取信息,生成歌手文件夹,再在歌手文件夹内生成对应专辑的文件夹,最后按条件移动歌曲。
现给出id3tool的帮助信息- usage:
- id3tool [<options>] <filename>
- -t, --set-title=WORD Sets the title to WORD
- -a, --set-album=WORD Sets the album to WORD
- -r, --set-artist=WORD Sets the artist to WORD
- -y, --set-year=YEAR Sets the year to YEAR [4 digits]
- -n, --set-note=WORD Sets the note to WORD
- -g, --set-genre=INT Sets the genre code to INT
- -G, --set-genre-word=WORD Sets the genre to WORD
- -c, --set-track=INT Sets the track number to INT
- -l, --genre-list Shows the Genre's and their codes
- -v, --version Displays the version
- -h, --help Displays this message
- 批量修改:for /f "delims=" %%i in ('dir /b *.mp3') do id3tool.exe -a nihao "%%~nxi"
- 提取信息:id3tool "filename“
- 下载地址:http://nekohako.xware.cx/id3tool/id3tool-1.2a-win32-x86.zip
复制代码
作者: hankerer 时间: 2013-1-28 13:09
本帖最后由 hankerer 于 2013-1-28 13:24 编辑
- @echo off
- setlocal enabledelayedexpansion
-
- for /f %%i in ('dir /a-d /b *.mp3') do (
-
- for /f "tokens=1,*" %%j in ('id3tool "%%i" ^| findstr "Artist" ') do (
- set "artist=%%k"
- set "artist=!artist: =!"
- (for /f "delims=" %%m in ('dir /ad /b^|findstr "!artist!" ') do (
- cd "!artist!" & call :checkAlbum %%i
- ) ) || (
- mkdir "!artist!"
- cd "!artist!"
- call :checkAlbum %%i
- )
- cd ..\
- )
- )
- pause
- goto :eof
-
- :checkAlbum
- for /f "tokens=1,*" %%p in ('..\id3tool "..\%1" ^| findstr "Album" ') do (
- set "album=%%q"
- set "album=!album: =!"
- (for /f "delims=" %%m in ('dir /ad /b^|findstr "!album!" ') do (
- cd "!album!"
- copy "..\..\%1" . >nul
- )) || (
- mkdir "!album!"
- cd "!album!"
- copy "..\..\%1" . >nul
- )
- cd ..\
- )
- goto :eof
复制代码
我写的够啰嗦的
作者: batsealine 时间: 2013-1-28 19:32
回复 2# hankerer
厉害厉害!!不过歌名中好像不能有空格,所以对英文歌就全部失效。另外如果想要移动歌曲而不是复制歌曲该怎样改,我直接将后面两个copy改成move好像不行。
作者: hankerer 时间: 2013-1-28 20:20
回复 3# batsealine
因为你那个工具出来的信息都在后面加了一串空格,所以我就把空格全过滤了,因此出现了有空格就不行的现象. 不太好搞.有其他高手写个码让我学习一下?
作者: terse 时间: 2013-1-28 22:23
不确定你的需求 先 ECHO- @echo off&setlocal EnableDelayedExpansion
- for /f "tokens=1,*" %%i in ('id3tool *.mp3^|findstr /ib "Filename: Artist: Album:"') do (
- if /i "%%i" == "Album:" if "!name!" == "Artist:" if "!name1!" == "Filename:" (
- md "!Artist:!\%%~nxj\" 2>nul
- echo move "!Filename:!" "!Artist:!\%%~nxj\"
- )
- set "name1=!name!"
- set "name=%%i"
- set "%%i=%%~nxj"
- )
- pause
复制代码
作者: batsealine 时间: 2013-1-28 23:55
回复 5# terse
你的批处理堪称完美啊!去掉那个echo就可以用了。
只是还想问一下findstr后的/ib有什么妙用,如何来干净的截取到输出信息中的有用部分?
作者: hankerer 时间: 2013-1-29 09:17
本帖最后由 hankerer 于 2013-1-29 09:27 编辑
回复 5# terse
%%~nxj
原来如此。这样就可以把尾巴上的空格都去掉了。
set "%%i=%%~nxj"
这句太妙了。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |