![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-11 05:57 |
共 47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [讨论]关于随机播放的几个代码,附完美代码。 |
| 可打印版本 1,424 / 11 |
| 第1楼 linee | 发表于 2008-12-31 19:58 |
| 初级用户 发帖 49 积分 94 | |
|
[讨论]关于随机播放的几个代码,附完美代码。 第一个,抄来的。特点是随机列表顺序播放。每首歌开随机变量随机编号然后通过排序输出,保证每首歌随机播放一次。
第二个,也是抄来的。特点是顺序列表随机播放。每首歌开变量顺序编号,然后按随机数对号播放,不用排序。 第三个,我自己的。特点是没有列表,要播歌得现找。不开变量编号,不排序,仅按随机数找歌播放。 或下面的代码,也实现同样功能。 这三个都没有临时文件, 有不同方案的来讨论下啊,不要有临时文件哦。 第四个,又抄了个方案,这个似乎更巧妙了些。直接利用扫描结果排序输出,不用开一大堆变量。也保证每首歌随机播放一次。 这不应该算是另一个方案,只是把无奈何版主的代码(上面第四个)改了下, 遗憾多了个rndmark.bat,谁能帮我精简下啊。rndmark.bat的代码如下: 感谢6楼的提点,进一步修改如下, 下面不用if判断,改用for判断, 再次修改,算是完美代码了吧,没有if判断了,也不用另外的for来判断了。 或,^_^ 或,^_^ [ Last edited by linee on 2009-1-7 at 14:21 ] |
|
| 第2楼 pusofalse | 发表于 2008-12-31 21:21 |
| 银牌会员 发帖 646 积分 1,604 | |
|
第三种应该会出错,因为歌曲的数目是未知的啊,若i=32766%%32767+1呢,你的目录中可能没有那么多歌曲。
|
|
| 第3楼 linee | 发表于 2008-12-31 21:44 |
| 初级用户 发帖 49 积分 94 | |
Originally posted by pusofalse at 2008-12-31 21:21: 这个考虑过了,没问题的,进入循环完整扫描一次后歌曲数目就变已知了。因为,假若随机数i大于你的歌曲数目的话,那本次for循环会找不到歌来播,也正是利用这点来进行一次完整的扫描,从而取得歌曲数目,这种情况只会有一次。知道歌曲数目后随机数i就不会大于歌曲数目了,也就总能找到歌来播了。 [ Last edited by linee on 2008-12-31 at 21:53 ] |
|
| 第4楼 linee | 发表于 2009-01-01 17:50 |
| 初级用户 发帖 49 积分 94 | |
|
这不应该算是另一个方案,只是把无奈何版主的代码改了下,
遗憾多了个rndmark.bat,谁能帮我精简下啊。rndmark.bat的代码如下: [ Last edited by linee on 2009-1-2 at 14:39 ] |
|
| 第5楼 linee | 发表于 2009-01-03 17:06 |
| 初级用户 发帖 49 积分 94 | |
|
又搞了个方案,不过不算是新的,相当于是第三个的变种,就当是练习命令吧。4楼的问题真的无解么?
[ Last edited by linee on 2009-1-3 at 20:58 ] |
|
| 第6楼 netbenton | 发表于 2009-01-03 23:52 |
| 银牌会员 发帖 752 积分 1,916 来自 广西 | |
|
看这样行吗? @echo off
if "%~1"=="k" goto :rndmak 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" goto :eof :rndmak shift echo %random%=%* [ Last edited by netbenton on 2009-1-4 at 01:12 ] |
|
| 第7楼 linee | 发表于 2009-01-04 00:27 |
| 初级用户 发帖 49 积分 94 | |
Originally posted by netbenton at 2009-1-3 23:52: 感谢提点,虽然还是要用if,也不失为一种方法。好想那个位置能用%random%就完美了,呵呵。你这个要改一下,因为盘符前多个k和空格。 下面是我改的。 [ Last edited by linee on 2009-1-4 at 00:52 ] |
|
| 第8楼 netbenton | 发表于 2009-01-04 01:10 |
| 银牌会员 发帖 752 积分 1,916 来自 广西 | |
|
哦!没看清是%*
改成是%1就可以了. 不过,你的更好. |
|
| 第9楼 linee | 发表于 2009-01-04 21:07 |
| 初级用户 发帖 49 积分 94 | |
|
再来个第四个的变种,不用if判断的,改用for判断,我也是第一次用for来判断。
|
|
| 第10楼 linee | 发表于 2009-01-05 13:50 |
| 初级用户 发帖 49 积分 94 | |
|
完美代码出现了,不用if判断,也不用另外的for来判断了。
自认为很完美了,谁还能优化就请提出来吧。 [ Last edited by linee on 2009-1-6 at 12:44 ] |
|
| 第11楼 linee | 发表于 2009-01-06 12:43 |
| 初级用户 发帖 49 积分 94 | |
|
还可以这样实现,迷人吧。^_^
[ Last edited by linee on 2009-1-6 at 12:59 ] |
|
| 第12楼 linee | 发表于 2009-01-07 14:19 |
| 初级用户 发帖 49 积分 94 | |
|
还可以这样,^_^
|
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |