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


    您给的脚本可以用,但是与我的使用环境有出入:
    我给每首歌曲在D:\jhrw\现用音乐\music下都设置了与歌曲名相同的批处理文件(这个批处理用来实现解除静音、设置音量,播歌曲,并在播放完后自动关闭进程和自动加静音)。而随机播放音乐的批处理放在  D:\jhrw\晨乐 ,  执行时实际是随机打开了D:\jhrw\现用音乐\music下歌曲同名的批处理。

    而且您的脚本有人为的判断,我想要7天到了自动重新开始在歌曲里再次随机播放歌曲,新的7天仍然不重复即可。

TOP

回复 4# 77七


    您的脚本我试了一下:一闪而过!
    我把我的使用环境再说的具体一些,以下内容是已经实现的:电脑默认静音,每次播放前会自动取消静音并设置音量大小,歌曲播放完后自动关闭播放器进程,电脑自动设置静音。
    为了达到这个效果,我给每首歌曲在D:\jhrw\现用音乐\music下都设置了与歌曲名相同的批处理文件(这个批处理用来实现解除静音、设置音量,播歌曲,并在播放完后自动关闭进程和自动加静音)。而随机播放音乐的批处理放在  D:\jhrw\晨乐 ,  执行时实际是随机打开了D:\jhrw\现用音乐\music下歌曲同名的批处理。

TOP

这样行不,随机到的音乐移动到“已播放”文件里后才播放,当“已播放”文件里的音乐文件数量大于一定数量(默认7)时移动回去
  1. @echo off
  2. set times=7
  3. set "ph=D:\jhrw\现用音乐\music"
  4. if not exist "%ph%\已播放" md "%ph%\已播放"
  5. set n=0
  6. for %%a in ("%ph%\已播放\*") do set /a n+=1
  7. if %n% gtr %times% move "%ph%\已播放\*" "%ph%\"
  8. for %%a in ("%ph%\*.flac" "%ph%\*.mp3" "%ph%\*.ogg") do set /a m+=1
  9. if not defined m (echo no file to play&pause&exit/b)
  10. set /a r=%random%%%%m%
  11. if %r% equ 0 set r=%m%
  12. for %%a in ("%ph%\*.flac" "%ph%\*.mp3" "%ph%\*.ogg") do (
  13. set /a counter+=1
  14. for /f %%_ in ('echo %%counter%%') do (
  15. if %%_ equ %r% (
  16. move "%%~fa" "%ph%\已播放\" && start "%ph%\已播放\%%~nxa"
  17. goto :end
  18. )
  19. )
  20. )
  21. :end
  22. pause
复制代码

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

测试代码之前请做好备份

TOP

本帖最后由 77七 于 2023-12-13 17:43 编辑
  1. @echo off
  2. rem 1.批处理保存为utf-8编码格式;
  3. rem 2.播放软件:MPV (https://mpv.io/);音量设定:nircmd (http://bcn.bathome.net/tool/nirsoft,2.86/nircmd.exe);均需添加到电脑环境变量。
  4. chcp 65001 >nul
  5. set "folder=D:\mp3"
  6. set /a k=m=0,e=(d=次数=7)*(n=数量=1)
  7. if not exist "%folder%\list.txt" (
  8. cd.>"%folder%\list.txt"
  9. )
  10. :1
  11. setlocal
  12. for /f "useback delims=" %%a in ("%folder%\list.txt") do (
  13. set _"%%a"=1
  14. set /a k+=1
  15. )
  16. if %k% geq %e% (
  17. cd.>"%folder%\list.txt"
  18. endlocal
  19. goto :1
  20. )
  21. for /f "delims=" %%i in ('dir /b /a-d "%folder%\*.mp3" "%folder%\*.flac"') do (
  22. if not defined _"%%i" (
  23. call set #%%random%%=%%i
  24. set /a m+=1
  25. )
  26. )
  27. if %m% lss %n% (
  28. cd.>"%folder%\list.txt"
  29. endlocal
  30. goto :1
  31. )
  32. for /f "tokens=1* delims==" %%a in ('set #') do (
  33. echo 播放 [%%b]
  34. nircmd mutesysvolume 0
  35. nircmd setsysvolume 30000
  36. rem 自行设置播放器
  37. mpv --window-minimized "%folder%\%%b"
  38. nircmd setsysvolume 0
  39. nircmd mutesysvolume 1
  40. >>"%folder%\list.txt" echo %%b
  41. set /a n-=1,1/n 2>nul || exit
  42. )
复制代码
bat小白,请多指教!谢谢!

TOP

用批处理怎么实现?

TOP

不想不重复,就得记录播放过的歌曲

TOP

返回列表