Board logo

标题: [网络工具] 批处理下载歌曲 [打印本页]

作者: pusofalse    时间: 2008-8-30 13:34     标题: 批处理下载歌曲

使用了外部工具curl,代码挺繁杂,不会sed等文本提取命令。测试成功率>=80%,失败原因可能找不到歌曲链接,或者无此歌曲。另一个失败原因是只会下载找到的第一个歌曲连接。
以下:
  1. @echo off&Title Batch_Downloader
  2. if exist temp\ rd temp /s /q 2>nul
  3. md temp
  4. set/p name=输入歌曲名字:
  5. set "nam=%name%"&set "name=%name: =+%"
  6. curl "temp\_tmp.txt'>http://one.cn.yahoo.com/s?p=%name%&v=music&ei=gbk&pid=ysearch&source=ysmt_topsearch_r&x=">temp\_tmp.txt
  7. cls
  8. for /f "tokens=4 delims= " %%a in ('findstr "http://i.music.cn.yahoo.com/down.php?" "temp\_tmp.txt"') do (
  9.    set "str=%%a"
  10.    setlocal enabledelayedexpansion
  11.    set "str=!str:ranges= !"
  12.    for /f %%i in ("!str:~6!") do (
  13.        curl "%%iranges=3">temp\_tmp1.txt&cls
  14.        for /f "tokens=6 delims== " %%s in ('findstr "歌曲出处" "temp\_tmp1.txt"') do (
  15. echo.&echo.&title %nam%: %%s
  16. echo          ===========================================================
  17. for /f "skip=1 delims=:" %%d in ('^(echo %%~s^&echo.^)^|findstr/o .*') do set/a m=^(80-%%d-3^)/2
  18. for /l %%c in (1 1 !m!) do set/p= <nul
  19. set/p=%%~s<nul&echo.
  20. echo          ===========================================================
  21. echo.&echo.
  22. set "ext=%%~s"&set "ext=!ext:~-4!"
  23. curl %%s -o "%nam%!ext!"
  24.       )
  25.    )
  26.    goto :next
  27. )
  28. :next
  29. rd temp /s /q 2>nul
  30. for /l %%a in (1 1 4) do echo.
  31. if exist "%nam%!ext!" (echo                                   下载完成。) else echo                                   下载失败。
  32. pause>nul
复制代码
------------------------------------------------------------------
10月4日修改:使用WFR.EXE WGET.EXE简化代码,添加歌曲备份功能。
  1. @echo off&setlocal enabledelayedexpansion
  2. :begin
  3. echo\&echo\
  4. for /f "tokens=1*" %%a in ('findstr /v $ %~fs0') do (
  5.       if "%%a" neq "::" (
  6.          set/p var=   输入歌曲存储路径:
  7.          echo\&echo\&set/p "sure=   What you specified is !var!,sure?(y/n)"
  8.          if /i "!sure:~,1!" equ "y" (
  9.              (echo.&call set/p=:: %%var%%<nul)>>"%~0"
  10.              ) else (
  11.              cls&goto begin
  12.          )) else (
  13.          set "var=%%b"
  14. ))
  15. if not exist "%var%" md "%var%"
  16. if "%var:~-1%" equ "\" set "var=%var:~,-1%"
  17. echo.&echo.
  18. set/p music=     输入歌曲名字:
  19. set "music=%music: =+%"&set "a=%music%"
  20. wget -O tmp.txt "http://one.cn.yahoo.com/s?p=%music%&v=music&ei=gbk&pid=ysearch&source=218&x=" -q
  21. type tmp.txt|wfr /rnnlic:".*(http://i.music.cn.yahoo.com/down.php)" /t:"\1"|wfr /rnnl
  22. ic:"ranges\=(\d).*" /t:"ranges=\1">t
  23. move /y t tmp.txt&set/p url=<tmp.txt
  24. wget "%url%" -O tmp.txt -q
  25. findstr "歌曲出处" "tmp.txt"|wfr /r:"(.*href\=\"^|\" target.*)" /t>"t"
  26. echo\&echo\&echo                      Is downloading...
  27. move /y t tmp.txt&wget -O "%var%\%a%.mp3" -i tmp.txt -q
  28. del tmp.txt
  29. pause
复制代码
wget.exe下载:http://bbs.bathome.net/thread-2040-1-1.html
wfr.exe下载:http://bbs.bathome.net/thread-1909-1-2.html
---------------------------------------------------------------------------------------------------
10月11日更新,添加歌曲试听功能,借助第三方工具curl.exe sed.exe
  1. @echo off&title Puso.D.False
  2. :: 08-10-11更新,添加歌曲试听、备份功能。
  3. :: 借助第三方工具sed.exe curl.exe
  4. :: sed.exe教程+下载:http://bbs.bathome.net/thread-1929-1-1.html
  5. :: curl.exe下载: http://bbs.bathome.net/thread-1761-1-2.html
  6. :: 下载以上两个工具,放到此批处理所在目录或%windir%目录中。
  7. :: 第一次运行需要指定歌曲存储路径,在指定目录下将创建urllist文件夹,用以存储歌曲链接,方便以后使用。
  8. :: 若要指定其他目录,把此批处理最后一行的":: 上次指定的歌曲路径"删除,重新运行此批处理即可。
  9. :: 成功率=>90%,出错原因可能是因为文本提取错误,或无此歌曲。
  10. echo.&echo   初始化…………&echo.&del %temp%\tmp.txt 2>nul
  11. ping /n 2 nul||(echo">www.baidu.com>nul||(echo  网络出现故障………&pause>nul&exit/b)
  12. :begin
  13. setlocal enabledelayedexpansion
  14. cls&echo\&echo\
  15. for /f "tokens=1*" %%a in ('findstr /v $ %~fs0') do (
  16.       if "%%a" neq "::" (
  17.          set/p var=   输入歌曲存储路径:
  18.          echo\&echo\&set/p "sure=   你输入的是【!var!】,是否确定(y/n)?"
  19.          if /i "!sure:~,1!" equ "y" (
  20.              (echo.&call set/p=:: %%var%%<nul)>>"%~0"
  21.              ) else (
  22.              cls&endlocal&goto begin
  23.          )) else (
  24.          set "var=%%b"
  25. ))
  26. if "%var:~-1%" equ "\" set "var=%var:~,-1%"
  27. if not exist "%var%\urllist\" md "%var%\urllist"
  28. cls&echo\&echo\
  29. set /p music=   输入歌曲名称(x退出):
  30. if /i "%music%" equ "x" exit/b
  31. set "a=%music%"&set "music=%music: =+%"
  32. if exist "%var%\%a%.mp3" (
  33.    cls&echo\&echo\
  34.    set /p "su=    歌曲已经存在,是否继续(y/n)?"
  35.    if /i "!su:~,1!" equ "n" endlocal&goto begin
  36. )
  37. if exist "%var%\urllist\%a%.txt" (
  38.    for /f "usebackq tokens=2*" %%i in ("%var%\urllist\%a%.txt") do (set/a y+=1&set "_!y!=%%j")
  39.    goto next
  40. )
  41. curl -s "http://one.cn.yahoo.com/s?p=%music%&v=music&ei=gbk&pid=ysearch&source=218&x="|^
  42. sed "/http.*i\.music\.cn\.yahoo\.com.down\.php/^!d;s/.*\(http.*ranges.[0-9]\).*/\1/">%temp%\tmp.txt
  43. for /f "delims=" %%i in (%temp%\tmp.txt) do (
  44.      set/a n+=1
  45.      if !n! leq 10 (
  46.         for /f "delims=" %%a in ('curl "%%i" -s^|sed "/歌曲出处.*http.*\.mp3.*/^!d;s/.*\^(http.*mp3\^).*/\1/"') do (
  47.              set/a x+=1
  48.              echo    !x! …………^> %%a
  49.              set "_!x!=%%a"
  50.         )) else (
  51.         goto next
  52. ))>>"%var%\urllist\%a%.txt"
  53. :next
  54. cls&echo\&echo\
  55. type "%var%\urllist\%a%.txt"&echo\&echo\
  56. set /p num=    输入歌曲编号试听 (e返回,x退出):
  57. if /i "%num:~,1%" equ "e" endlocal&goto begin
  58. if /i "%num:~,1%" equ "x" exit/b
  59. if not defined _%num% goto next
  60. start wmplayer.exe "!_%num%!"
  61. echo.&echo.&set /p down=      是否下载(y/n)?
  62. echo\&echo\
  63. if /i "%down:~,1%" equ "y" (curl -o "%var%\%a%.mp3" "!_%num%!") else goto next
  64. del %temp%\tmp.txt 2>nul&endlocal&cls&echo\&echo\
  65. echo      下载完成,任意键返回……&pause>nul&goto begin
复制代码
链接: https://pan.baidu.com/s/1D_vhFSpy8qc1rqo8EQNNRw?pwd=nvyt
sed教程+下载:http://bbs.bathome.net/thread-1929-1-1.html
curl下载:http://bbs.bathome.net/thread-1761-1-2.html
作者: Batcher    时间: 2008-8-30 14:24

Nice job!
作者: huahua0919    时间: 2008-8-30 15:05

仔细研究一下,帮你顶上
作者: SmallK    时间: 2008-8-30 23:19

不错,实用!辛苦了!顶一下~
作者: wangwei4106    时间: 2008-8-31 13:06


来看看。学习下……
作者: huangzongwu    时间: 2008-9-2 09:15

very good!
太好了,如果配合vbs一起用会更好的
作者: qingfengzhixia    时间: 2008-9-7 05:08

下载了,感觉不错
作者: Batcher    时间: 2008-9-7 12:26     标题: 回复 6楼 的帖子

为什么“配合vbs一起用会更好的”?
作者: wbwchina    时间: 2008-9-10 19:07     标题: 太棒了。偶像!

偶像!偶像!偶像!偶像!
作者: rubin    时间: 2008-9-15 19:08

hao de   hao de
作者: 学者    时间: 2008-9-16 19:45

不知道是我不会用还怎么,用不成
作者: pusofalse    时间: 2008-9-16 20:52     标题: 回复 11楼 的帖子

怎么用不成?说的详细点,如果出错,就把出错信息贴上来,方便调试修改。
作者: i520king    时间: 2009-11-12 22:13

都是下载不了
作者: qq1063971928    时间: 2009-11-22 19:46     标题: 看看

希望你的代码能帮上忙,在写两个字,够了吧
作者: 狱渊    时间: 2013-4-29 14:46

回复 1# pusofalse


    很好用啊  谢了




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2