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

[文件操作] 批处理如何实现:7天内随机播放不重复的音乐?

如题所示:每天固定时段在同一个文件夹内随机播放一个音乐,7天内播放过的音乐不再播放,7天后一个轮回。

我自己在网上找了一段大神的批处理,能实现每次都随机播放,但避免不了重复,代码如下:
  1. @echo off&color a&setlocal enabledelayedexpansion
  2. for %%a in ("D:\jhrw\现用音乐\music\*.bat") do set /a n+=1
  3. set /a m=%random%%%%n%
  4. if %m% equ 0 set m=%n%
  5. for %%a in ("D:\jhrw\现用音乐\music\*.bat") do (
  6. set /a counter+=1
  7. if !counter! equ %m% start %%a
  8. )
复制代码

回复 37# yanni_enya

wmic有两种应用方式,交互方式和命令行调用方式,批处调用wmic功能是采用第二种方式
论坛老帖中有很多有关批处调用wmic的示例可供学习摸索,另给一个链接以供参考 https://www.cnblogs.com/liujunjun/p/18101437

TOP

回复 35# aloha20200628


    您是用wmic编的代码吗?可否推荐本自学的书~

TOP

回复 35# aloha20200628


    已经很感谢了,好的~

TOP

回复 34# yanni_enya

依照论坛的规则,此求与本帖主题不符,还是应用 http://www.bathome.net/thread-69969-1-1.html 求解吧

TOP

回复 33# aloha20200628


    感谢!大神再请教一个,
    最近维护机房需要一个批处理具备一下功能:
     1、获取学生机电脑硬盘大小和内存大小,生成记事本,并用获取的硬盘大小、内存大小和计算机名命名记事本,具体这个样子:240g&4g&A6  (分隔符&可以用别的符号替代)
     2、生成记事本后,拷贝该记事本到教师机的Y文件夹内(教师机有访问密码,比如ffu,账号是administrator)。

TOP

本帖最后由 aloha20200628 于 2024-10-19 11:33 编辑

回复 32# 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! %date:~0,10%>>"!7F!"
  10. start "" "!mF!"
  11. endlocal &exit/b
复制代码

TOP

回复 30# aloha20200628


    可否在每条播放记录后边加上播放曲目当天的日期

TOP

回复 30# aloha20200628


    管用!

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

回复 24# aloha20200628


    这周末刚好把歌曲放完了一轮,自动开启了第二轮播放,当前已放了一首了,问题是歌曲播放后生成的记录前边的编号没有从1开始,而是顺延了一个数字38,能否让序号再次从1开始?(当前37首歌)

TOP

回复 26# _avatar_


    嗯,理解你说的。本身需求每天播放次数不多,前边发的那些假设就是每天播一首。
    每首歌单独一个bat是因为电脑平常需要静音状态,而每首歌长度又不同,为了播放时自动解除静音,播放后第一时间自动加静音,所以会给每首歌单独一个批处理。
    我也想代码越简单越好,只是个人能力确实有限,暂时想不到更好的办法。

TOP

回复 26# _avatar_


    编程最大的困扰就是甲方需求描述不明,或自己都没明白

QQ 20147578

TOP

回复 9# yanni_enya


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

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

TOP

本帖最后由 yanni_enya 于 2023-12-26 09:14 编辑

回复 24# aloha20200628


        可以用!而且修改后直接跟在之前的已播列表记录后边,序号都是跟着的!

TOP

返回列表