[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
本帖最后由 aloha20200628 于 2023-12-14 12:39 编辑


假设楼主的曲库不超过8000首,以便批处理脚本可采用最便捷的变量名字典匹配方法;
假设楼主的 D:\jhrw\现用音乐\music\*.bat 其中的文件名不含如 ä、č 等欧洲古典曲目中常见的怪异字符,以免再来回切换系统码页(936/65001)。
代码会在 D:\jhrw\现用音乐\music 目录中创建一个7天有效期记录文件 D:\jhrw\现用音乐\music\list.7,逾期自动清零。
  1. @echo off &setlocal enabledelayedexpansion
  2. set "7F=D:\jhrw\现用音乐\music\list.7"
  3. if not exist "!7F!" (cd.>"!7F!") else for /f %%k in ('find /v /c "" ^<"!7F!" ') do if %%k geq 7 (cd.>"!7F!")
  4. for %%b in ("D:\jhrw\现用音乐\music\*.bat") do (set/a "n+=1" &set "$!n!=%%b")
  5. :[Loop]
  6. set/a m=%random%%%%n%+1
  7. for %%k in (!m!) do (set "mF=!$%%k!")
  8. find /i "!mF!" "!7F!">nul && goto[Loop]
  9. echo,!mF!>>"!7F!"
  10. start "" "!mF!"
  11. endlocal &exit/b
复制代码

TOP

回复 18# yanni_enya

一。15楼代码并没有生成待播列表文件,与曲库乐曲对应的*.bat实际上就相当于待播文件。
二。作为建议,如果你的曲库有上百首,也可将15楼代码第3行中的 geq 7 改为 geq 30,即每月每天不重复播放;如有上千首,甚至可改为 geq 365,即每年每天不重复播放。
三。只要曲目名称或与其对应的*.bat名称不含那些欧洲古典乐曲中常见的 ä、č 等怪异字符,代码运行就不会因其“作祟”。

TOP


代码中的 7F 是变量名,list.7 是文件名,只有 geq 7 中的 7 才是直接影响重复天数的关键值,作整体替换没问题。
回复 20# yanni_enya

TOP

本帖最后由 aloha20200628 于 2023-12-25 18:09 编辑

回复 23# yanni_enya

新版本在已播放列表文件中加入行首序号。
  1. @echo off &setlocal enabledelayedexpansion
  2. set "i=0" &set "7F=D:\jhrw\现用音乐\music\list.7"
  3. if not exist "!7F!" (cd.>"!7F!") else for /f %%k in ('find /v /c "" ^<"!7F!" ') do (set "i=%%k" &if %%k geq 7 (cd.>"!7F!"))
  4. for %%b in ("D:\jhrw\现用音乐\music\*.bat") do (set/a "n+=1" &set "$!n!=%%b")
  5. :[Loop]
  6. set/a m=%random%%%%n%+1
  7. for %%k in (!m!) do (set "mF=!$%%k!")
  8. find /i "!mF!" "!7F!">nul && goto[Loop]
  9. set/a "i+=1" &echo,!i!: !mF!>>"!7F!"
  10. start "" "!mF!"
  11. endlocal &exit/b
复制代码

TOP

回复 29# yanni_enya

已订正,新版代码如下
  1. @echo off &setlocal enabledelayedexpansion
  2. set "i=0" &set "7F=D:\jhrw\现用音乐\music\list.7"
  3. if not exist "!7F!" (cd.>"!7F!") else for /f %%k in ('find /v /c "" ^<"!7F!" ') do (set "i=%%k" &if %%k geq 7 (cd.>"!7F!"&set "i=0"))
  4. for %%b in ("D:\jhrw\现用音乐\music\*.bat") do (set/a "n+=1" &set "$!n!=%%b")
  5. :[Loop]
  6. set/a m=%random%%%%n%+1
  7. for %%k in (!m!) do (set "mF=!$%%k!")
  8. find /i "!mF!" "!7F!">nul && goto[Loop]
  9. set/a "i+=1" &echo,!i!: !mF!>>"!7F!"
  10. start "" "!mF!"
  11. endlocal &exit/b
复制代码

TOP

返回列表