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

批处理命令choice如何控制gplay随时切歌?

  1. @echo off >nul 2>nul
  2. cls
  3. color 02
  4. title 音乐播放器
  5. mode con: cols=30 lines=20
  6. if not exist %windir%\system32\gplay.exe copy gplay.exe %windir%\system32 >nul 2>nul   
  7. :loop
  8. set a=0
  9. setlocal EnableDelayedExpansion
  10. for /f "delims=" %%i in ('dir/b *.mp3') do (
  11. set /a a+=1
  12. set _!a!="%%i"
  13. )
  14. set /a ss=%random%%%%a%+0
  15. call set var=%%_%ss%%%
  16. echo %var%
  17. echo 满意不?(1:YES 2:NO)
  18. CHOICE /T 5 /C 12 /D 1 /N    >nul 2>nul
  19.                      
  20. if %errorlevel% equ 1  gplay %var% >nul 2>nul||goto loop
  21. if %errorlevel% equ 2 goto loop
复制代码
一开始用的是这种方法,但是这种方法的局限限在于如果音乐已经开始播放了,就没有办法切歌了,切歌只能在开始显示歌名后的5s以内,音乐没有开始的时候就要选择是否听?
后来使用了
  1. @echo off >nul 2>nul
  2. cls
  3. color 02
  4. title 音乐播放器
  5. mode con: cols=30 lines=20
  6. if not exist %windir%\system32\gplay.exe copy gplay.exe %windir%\system32 >nul 2>nul   
  7. :loop
  8. set a=0
  9. setlocal EnableDelayedExpansion
  10. for /f "delims=" %%i in ('dir/b *.mp3') do (
  11. set /a a+=1
  12. set _!a!="%%i"
  13. )
  14. set /a ss=%random%%%%a%+0
  15. call set var=%%_%ss%%%
  16. echo %var%
  17. echo (1:YES 2:NO)
  18. start /b "" gplay %var% >nul 2>nul||goto loop
  19. ::gplay %var% >nul 2>nul||goto loop
  20. CHOICE /T 30 /C 12 /D 1 /N    >nul 2>nul
  21.                      
  22. if %errorlevel% equ 1  echo.
  23. if %errorlevel% equ 2 taskkill /f /im gplay.exe  >nul 2>nul
  24. goto loop
  25. :end
复制代码
但是问题出现了,这个时候先显示歌名,然后开始播放歌曲,如果不满意,直接按2就进入下一首随即歌曲了(这个是目的,对的),如果不操作2,30s后,或者按1,就会重新选歌读入,而上面一首歌还没有播放完成,就会重叠,
也许有人会说把30s设置大点就是了,但是由于每一首歌曲长度不不同,如果此处设置500s,那也就是说,500s不操作,或者500s以内我按了1,就切换到下一首了,这中间会有很多空白时间,所以也不是程序想要的


,所以想请问一下,这个如何解决,就是不操作,1首接一首随即播放  ;按2就直接在播放过程中切歌



还有一点小疑问:由于我的文件夹里面除了mp3以外还有一些其他的文件,所以使用了gplay %var% >nul 2>nul||goto loop这句,但是一旦我要使用choice‘时候,就得用上start语句,这时候 ||goto loop 就失效了,不知道为什么?

多线程可以解决

TOP

本帖最后由 CrLf 于 2012-1-14 01:10 编辑

因为 start 确实成功执行了
另外,可以试试用 replace 命令强行将歌曲替换为空文件...

TOP

是啊,我现在的目的就是第二组代码里面如何实现,不操作,就直接播放下去,播放完毕进入下一首歌,如果在播放中间,按2,就直接切到下一首歌?

TOP

返回列表