- @echo off >nul 2>nul
- cls
- color 02
- title 音乐播放器
- mode con: cols=30 lines=20
- if not exist %windir%\system32\gplay.exe copy gplay.exe %windir%\system32 >nul 2>nul
-
- :loop
-
-
- set a=0
- setlocal EnableDelayedExpansion
- for /f "delims=" %%i in ('dir/b *.mp3') do (
- set /a a+=1
- set _!a!="%%i"
- )
- set /a ss=%random%%%%a%+0
- call set var=%%_%ss%%%
- echo %var%
- echo 满意不?(1:YES 2:NO)
-
- CHOICE /T 5 /C 12 /D 1 /N >nul 2>nul
-
- if %errorlevel% equ 1 gplay %var% >nul 2>nul||goto loop
- if %errorlevel% equ 2 goto loop
复制代码 一开始用的是这种方法,但是这种方法的局限限在于如果音乐已经开始播放了,就没有办法切歌了,切歌只能在开始显示歌名后的5s以内,音乐没有开始的时候就要选择是否听?
后来使用了- @echo off >nul 2>nul
- cls
- color 02
- title 音乐播放器
- mode con: cols=30 lines=20
- if not exist %windir%\system32\gplay.exe copy gplay.exe %windir%\system32 >nul 2>nul
-
- :loop
-
-
- set a=0
- setlocal EnableDelayedExpansion
- for /f "delims=" %%i in ('dir/b *.mp3') do (
- set /a a+=1
- set _!a!="%%i"
- )
- set /a ss=%random%%%%a%+0
- call set var=%%_%ss%%%
- echo %var%
- echo (1:YES 2:NO)
-
- start /b "" gplay %var% >nul 2>nul||goto loop
- ::gplay %var% >nul 2>nul||goto loop
-
- CHOICE /T 30 /C 12 /D 1 /N >nul 2>nul
-
- if %errorlevel% equ 1 echo.
- if %errorlevel% equ 2 taskkill /f /im gplay.exe >nul 2>nul
- goto loop
-
- :end
复制代码 但是问题出现了,这个时候先显示歌名,然后开始播放歌曲,如果不满意,直接按2就进入下一首随即歌曲了(这个是目的,对的),如果不操作2,30s后,或者按1,就会重新选歌读入,而上面一首歌还没有播放完成,就会重叠,
也许有人会说把30s设置大点就是了,但是由于每一首歌曲长度不不同,如果此处设置500s,那也就是说,500s不操作,或者500s以内我按了1,就切换到下一首了,这中间会有很多空白时间,所以也不是程序想要的
,所以想请问一下,这个如何解决,就是不操作,1首接一首随即播放 ;按2就直接在播放过程中切歌
还有一点小疑问:由于我的文件夹里面除了mp3以外还有一些其他的文件,所以使用了gplay %var% >nul 2>nul||goto loop这句,但是一旦我要使用choice‘时候,就得用上start语句,这时候 ||goto loop 就失效了,不知道为什么? |