『楼 主』:
[讨论]关于随机播放的几个代码,附完美代码。
第一个,抄来的。特点是随机列表顺序播放。每首歌开随机变量随机编号然后通过排序输出,保证每首歌随机播放一次。
@echo off
for /r %%i in (*.mp3,*.wma) do call set $%%random%%=%%i
for /f "tokens=2 delims==" %%i in ('set $') do "C:\Program Files\MPlayer\mplayer.exe" "%%i" 第二个,也是抄来的。特点是顺序列表随机播放。每首歌开变量顺序编号,然后按随机数对号播放,不用排序。
@echo off
setlocal enabledelayedexpansion
for /r %%i in (*.mp3,*.wma) do (set /a n+=1&set n!n!=%%i)
:loop
set /a i=%random%%%n+1
"C:\Program Files\MPlayer\mplayer.exe" "!n%i%!"
goto loop 第三个,我自己的。特点是没有列表,要播歌得现找。不开变量编号,不排序,仅按随机数找歌播放。
@echo off
setlocal enabledelayedexpansion
set n=32767
:loop
set /a i=%random%%%n+1,j=0
for /r %%a in (*.mp3,*.wma) do (
set /a j+=1
if !j! == %i% ("C:\Program Files\MPlayer\mplayer.exe" "%%a"&goto loop)
)
set n=%j%&goto loop 或下面的代码,也实现同样功能。
@echo off
set n=32768
:loop
set /a i=%random%%%n+1
for /f "tokens=1* delims=:" %%a in ('dir/b/s *.mp3,*.wma ^|findstr /n .*') do (
if %%a equ %i% ("C:\Program Files\MPlayer\mplayer.exe" "%%b"&goto loop)
set j=%%a
)
set n=%j%&goto loop 这三个都没有临时文件,
有不同方案的来讨论下啊,不要有临时文件哦。
第四个,又抄了个方案,这个似乎更巧妙了些。直接利用扫描结果排序输出,不用开一大堆变量。也保证每首歌随机播放一次。
@echo off
if "%1" NEQ "$" (
for /f "tokens=2 delims==" %%a in ('"%~0" $^|sort') do "C:\Program Files\MPlayer\mplayer.exe" "%%a"
) else for /r %%i in (*.mp3,*.wma) do call echo %%random%%=%%i 这不应该算是另一个方案,只是把无奈何版主的代码(上面第四个)改了下,
@echo off
for /f "tokens=2 delims==" %%a in ('^(for /r %%i in ^(*.mp3,*.wma^) do call rndmark.bat %%i^)^|sort') do "C:\Program Files\MPlayer\mplayer.exe" "%%a" 遗憾多了个rndmark.bat,谁能帮我精简下啊。rndmark.bat的代码如下:
@echo %random%=%* 感谢6楼的提点,进一步修改如下,
@echo off
if "%~1"=="k" echo %random%=%2&goto :EOF
for /f "tokens=2 delims==" %%a in ('^(for /r %%i in ^(*.mp3,*.wma^) do call %0 k "%%i"^)^|sort') do "C:\Program Files\MPlayer\mplayer.exe" %%a 下面不用if判断,改用for判断,
@echo off
for %%i in (%1) do (for /r %%j in (*.mp3,*wma) do call echo %%random%%=%%j)&goto :EOF
for /f "tokens=2 delims==" %%a in ('"%~0" 1^|sort') do "C:\Program Files\MPlayer\mplayer.exe" "%%a" 再次修改,算是完美代码了吧,没有if判断了,也不用另外的for来判断了。
@echo off
(for %1 %%i in (*.mp3,*.wma) do call echo %%random%%=%%i)%3>nul&%2:EOF
for /f "tokens=2 delims==" %%a in ('"%~0" /r,goto,2^|sort') do "C:\Program Files\MPlayer\mplayer.exe" "%%a" 或,^_^
@echo off&%x%
set "x=(for /r %%i in (*.mp3,*.wma) do call echo %%random%%=%%i)&goto:EOF"
for /f "tokens=2 delims==" %%a in ('"%~0"^|sort') do "C:\Program Files\MPlayer\mplayer.exe" "%%a" 或,^_^
@echo off&%~1
for /f "tokens=2delims==" %%a in ('%~0 "(for /r %%i in (*.mp3,*.wma)do call echo %%^random%%=%%i)&goto:EOF"^|sort')do "C:\Program Files\MPlayer\mplayer.exe" "%%a" [ Last edited by linee on 2009-1-7 at 14:21 ]
此帖被 +4 点积分 点击查看详情 评分人:【 HAT 】 | 分数: +4 | 时间:2009-1-1 01:10 |
|
|