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


那就奇怪了,应该到第3行就会出错的,但不应该提示%%a

TOP

回复 10# yanni_enya


啊,7楼代码第19行后面的
start "%ph%\已播放\%%~nxa"
改成
start "" "%ph%\已播放\%%~nxa"
或者其他播放命令

默认音乐文件位置是D:\jhrw\现用音乐\music,不是的话自己修改(7楼代码第4行),还有,得保存为ansi编码的bat

TOP

本帖最后由 yanni_enya 于 2023-12-19 15:19 编辑

回复 15# aloha20200628


    能用!! 需要保存成ANSI码,估计之前几位大神的代码也能用,只是我没另存为ANSI码就运行了,实在抱歉啊!

    试了半天,大概是这个样子:1、我们在music下能看到已播列表,不晓得在哪生成了一个7次播放都不会重复的待播列表(所谓的7天就是7天内,每天播一首),然后第8次播放就会重新生成一个新的7首曲目不重复播放的列表,依次循环。(music文件夹下生成的已播
                                              列表一旦删除,再次执行代码会随机生成新的待播列表)
                                         2、而且在电脑任意位置执行同一组代码,都是指向同一个随机生成的播放列表!
                                         3、修改播放数字后,生成的播放列表各是各,互不干扰。
    明白了这些代码也就好改了,非常感谢诸位大神,膜拜了

TOP

回复 18# yanni_enya

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

TOP

回复 19# aloha20200628


       您的代码目前我都是整体替换数字7,music文件夹里有多少曲目,我就替换成对应的数字。
       geq 后边跟的数字代表对应天数不重复播放歌曲,请问代码中多个7F仅仅是个名称是么?  list.7  后边的数字7也可以随意修改么?

TOP


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

TOP

回复 21# aloha20200628
  灰常感谢

TOP

回复 21# aloha20200628


    新的需求:music下歌曲越来越多,已播放列表的文件也多起来了,能否给已播放列表里记录的每首歌曲的前边把序号加上,这样看起来一目了然,不然太费眼睛了!

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

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

回复 24# aloha20200628


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

TOP

回复 9# yanni_enya


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

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

TOP

回复 26# _avatar_


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

QQ 20147578

TOP

回复 26# _avatar_


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

TOP

回复 24# aloha20200628


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

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

返回列表