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

TOP

我试着写了一个,脚本的不重复周期通过  loop 变量控制,默认周期为七天。
每天的运行次数不限,只要你的歌库数量足够。
调用的播放器由系统设置的默认支持的播放器决定。
默认支持的歌曲类型: flac / mp3 / wav / ape , 其他格式可自行添加。
周期之内如果所有歌曲都被播放过,再次运行会提示 “所有歌曲都已经播放过一遍了”

脚本会设置一个系统环境变量 “playConfig”, 如果与已有系统环境变量冲突,请自行修改!

脚本代码:
  1. @echo off&mode con cols=20 lines=2&color a&setlocal enabledelayedexpansion
  2. set loop=7
  3. set str=%date:/=%
  4. set now=%str:~0,8%
  5. set config=%now%;1;1;0
  6. for /r %%i in (*.flac *.mp3 *.wav *.ape) do set /a total+=1
  7. echo # 歌曲列表 >list.txt
  8. dir *.flac *.mp3 *.wav *.ape /s /b >>list.txt
  9. set /a total+=1
  10. if NOT DEFINED playConfig (
  11.   setx /m playConfig "%config%" >nul
  12.   set playConfig=%config%
  13. )
  14. for /f "eol=# delims=; tokens=1,2,3,4" %%i in ("%playConfig%") do (
  15.   set d=%%i
  16.   set c=%%k
  17.   set /a t=%%j
  18.   set nums=%%l
  19.   if "%%i" neq "%now%" (
  20.     set /a t=%%j+1
  21.     set d=%now%
  22.   )
  23. )
  24. :rand
  25. set /a randNum=%random%%%!total!
  26. :start
  27. if !c! geq !total! echo 所有歌曲都已经播放过一遍啦! & pause>nul & goto :eof
  28. for %%i in (!nums!) do if %%i == %randNum% goto rand
  29. set /a c+=1
  30. if !t! leq %loop% set config=!d!;!t!;!c!;!nums!
  31. setx /m playConfig "%config%,%randNum%" >nul
  32. for /f "skip=%randNum% delims=" %%i in (list.txt) do start "" "%%i" & goto :eof
复制代码

TOP

回复 9# yanni_enya


    似乎你并没有理解我的代码,脚本并不需要人为判断,我是通过获取打开脚本时你电脑的当前时间变化来计算天数的,如果日期不变,天数计算就不变。
    也就是说,我脚本中是没有限制每天播放歌曲的次数的,只要你歌曲数量足够,你可以每天运行100次脚本,随机播放100首歌,并且七天内都不会有重复歌曲,七天之后脚本会自动重置,并不需要你手动修改什么。
    脚本里唯一需要修改的是你想循环的天数。

    至于你说的是通过调用另一个bat 脚本来播放歌曲,因为你最开始并没有说明这些,我也就没办法预知。
    可能是我想得太多,你只需要每天播放一首歌,我想着是不限制每天播放的次数,只保证在七天内不会出现重复歌曲。

TOP

返回列表