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

[文件操作] 求助批处理如何按日期自动播放音乐?

d:\mp3文件夹里一堆mp3文件,如何按日期每天随机抽取20首自动播放(不能重复)?谢谢!

请具体说说,按日期每天 有哪些含义?和每次有什么区别?
bat小白,请多指教!谢谢!

TOP

本帖最后由 thp2008 于 2023-9-16 19:21 编辑

这个估计比较难以实现,大部分播放器对命令行的支持并不好,功能并不全。有个变通的方法,就是将你D:\mp3目录,从今天的日期开始创建子目录,每天的日期子目录中,都随机移动20个mp3进去,直到你所有mp3移动完。然后,你每天按对应的日期,播放对应日期的子目录下的20个MP3就好了,这样只要你本身MP3文件不重复,也就不存在重复。

保存为xxx.ps1
ANSI编码。
如果不允许运行Powershell脚本,Powershell 管理员权限运行,Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser 选Y。
  1. # 指定 MP3 文件夹路径
  2. $mp3FolderPath = "D:\mp3"
  3. # 获取文件夹内的所有 MP3 文件
  4. $mp3Files = Get-ChildItem -Path $mp3FolderPath -Filter "*.mp3"
  5. # 获取 MP3 文件总数
  6. $totalCount = $mp3Files.Count
  7. # 每组文件数
  8. $groupSize = 20
  9. # 获取今天的日期
  10. $todayDate = Get-Date
  11. # 循环创建子文件夹并移动文件
  12. for ($i = 1; $i -le $totalCount; $i += $groupSize) {
  13.     # 创建子文件夹名称,使用日期命名
  14.     $folderName = $todayDate.ToString("yyyyMMdd")
  15.     # 检查文件夹是否已存在,如果存在,增加一个后缀
  16.     $suffix = 1
  17.     while (Test-Path (Join-Path -Path $mp3FolderPath -ChildPath $folderName)) {
  18.         $folderName = $todayDate.AddDays($suffix).ToString("yyyyMMdd")
  19.         $suffix++
  20.     }
  21.     # 创建子文件夹
  22.     $folderPath = Join-Path -Path $mp3FolderPath -ChildPath $folderName
  23.     New-Item -ItemType Directory -Path $folderPath
  24.     # 计算每组的起始和结束索引
  25.     $start = $i - 1
  26.     $end = [math]::Min($start + $groupSize - 1, $totalCount - 1)
  27.     # 移动文件到子文件夹中
  28.     $mp3Files[$start..$end] | ForEach-Object {
  29.         $destinationPath = Join-Path -Path $folderPath -ChildPath $_.Name
  30.         Move-Item -Path $_.FullName -Destination $destinationPath
  31.     }
  32.     # 使用日期加一天
  33.     $todayDate = $todayDate.AddDays(1)
  34. }
  35. Write-Host "MP3 文件已按要求分组并移动到子文件夹中。"
复制代码
Ai帮你写的,我也不怎么懂

TOP

回复 3# thp2008


   或可使用wmplayer.ocx?再说都用ps了还担心不能播放?

TOP

你再弄好了上一步后,我再给你弄个播放脚本,你点击后,就只播放当天日期的文件夹的音乐,这样就实现了,你说的,按日期,20首,每天不重复的要求。

但是每次播放器都不一样,我以我用的播放器为例,给你参考。我用的是PotPlayer
保存为ANSI,我在我的电脑上测试没有问题。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. rem 获取当前日期并格式化为YYYYMMDD
  4. for /f "tokens=1-3 delims=/" %%a in ("%date%") do (
  5.     set "year=%%a"
  6.     set "month=%%b"
  7.     set "day=%%c"
  8. )
  9. rem 去掉星期几信息,设置文件夹路径
  10. set "datevar=!year!!month!!day!"
  11. set "datevar=!datevar:~0,8!"  rem 仅保留年月日部分
  12. set "datePath=D:\mp3\!datevar!"
  13. rem 检查日期路径是否存在
  14. if exist "%datePath%" (
  15.     rem 启动 PotPlayer Mini 播放该路径下的音乐
  16.     "C:\Program Files\DAUM\PotPlayer\PotPlayerMini64.exe" "%datePath%" /autoplay
  17. ) else (
  18.     echo 文件夹 %datePath% 不存在。
  19. )
  20. endlocal
复制代码

TOP

回复 3# thp2008

播放器可以用第三方的ffplay
  1. set SDL_AUDIODRIVER=directsound
  2. ffplay.exe -autoexit -nodisp "123.mp3"
复制代码

TOP

我又让Ai帮你做了个,让你可以选择最近7天的菜单去播放。
我测试了一下,还挺不错。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. rem 获取今天的日期并格式化为YYYYMMDD
  4. for /f "tokens=1-3 delims=/" %%a in ("%date%") do (
  5.     set "year=%%a"
  6.     set "month=%%b"
  7.     set "day=%%c"
  8. )
  9. rem 去掉星期几信息,设置文件夹路径
  10. set "datevar=!year!!month!!day!"
  11. set "datevar=!datevar:~0,8!"  rem 仅保留年月日部分
  12. echo.
  13. echo 请选择需要播放的日期:
  14. echo.
  15. rem 创建日期菜单
  16. for /l %%i in (1,1,7) do (
  17.     set "nextDate=!datevar:~0,4!!datevar:~4,2!!datevar:~6,2!"
  18.     echo [%%i] !nextDate!
  19.     if %%i lss 7 echo.
  20.     set /a "datevar=datevar + 1"
  21. )
  22. echo.
  23. set /p "choice=请选择要播放音乐的日期(1-7): "
  24. if "%choice%" geq "1" if "%choice%" leq "7" (
  25.     rem 获取选择菜单上的日期并构建路径
  26.     set /a "selectedDate=%choice%-1"
  27.     set "datePath="
  28.         set /a "day=%date:~8,2%+selectedDate"
  29.         set "month=%date:~5,2%"
  30.         set "year=%date:~0,4%"
  31. rem 设置文件夹路径
  32.     set "datevar3=!year!!month!!day!"
  33.     set "datePath=D:\mp3\!datevar3!"
  34. rem 检查日期路径是否存在
  35.     if exist "!datePath!" (
  36.         rem 启动 PotPlayer Mini 播放该路径下的音乐
  37.         start "" "C:\Program Files\DAUM\PotPlayer\PotPlayerMini64.exe" "!datePath!" /autoplay
  38.     ) else (
  39.         echo 文件夹 "!datePath!" 不存在。
  40.     )
  41. ) else (
  42.     echo 无效的选择。
  43. )
  44. endlocal
复制代码

TOP

主要是PotPlayer你调整好界面后,关闭后,每次打开,都能看到跟上次调整好一样的界面,并且可以调整播放进度,音量、音效、也有播放列表清单,供你查看与选择,像90年代的Winamp。感觉还可以。我用了一会儿,还不错

TOP

回复 2# 77七


如今天9月17日,就在d:\mp3下自动建立20230917文件夹,然后从d:\mp3随机移动20个mp3文件到这文件夹并自动播放

TOP

回复 9# tmp05


    测试5楼代码遇到什么问题了吗?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复  tmp05


    测试5楼代码遇到什么问题了吗?
Batcher 发表于 2023-9-17 10:17





你是说 "C:\Program Files\DAUM\PotPlayer\PotPlayerMini64.exe" "!datePath!" /autoplay  前面没加start "" ,这个是我自已加上去的,Ai没加,我测试后,发现不能自动退出。后面就加上了。


 rem 仅保留年月日部分 还是说,这部分,从写法上来说,不应该放在后面,应该放在上面,但是我也奇怪,在Windows 11 和 Windows 10 上都测试正常。

还是说,这个年月日的获取方式,我不明白,Ai怎么要用这么多步骤获取,不是%date:~0,4%%date:~5,2%%date:~8,2% 就解决了,我也不懂。而且,它经常给出的年月日变量,都是带星期的,感觉也不是那么聪明,经常,要测试几次,反馈给它才能运行正常。

TOP

  1. @echo off
  2. rem 批处理保存为utf-8编码格式
  3. chcp 65001 >nul
  4. set "folder=D:\mp3"
  5. set /a m=0,n=20
  6. if not exist "%folder%\list.txt" (
  7. cd.>"%folder%\list.txt"
  8. )
  9. :1
  10. setlocal
  11. for /f "useback delims=" %%a in ("%folder%\list.txt") do (
  12. set _"%%a"=1
  13. )
  14. for /f "delims=" %%i in ('dir /b /a-d "%folder%\*.mp3" "%folder%\*.flac"') do (
  15. if not defined _"%%i" (
  16. call set #%%random%%=%%i
  17. set /a m+=1
  18. )
  19. )
  20. if %m% lss %n% (
  21. cd.>"%folder%\list.txt"
  22. endlocal
  23. goto :1
  24. )
  25. for /f "tokens=1* delims==" %%a in ('set #') do (
  26. echo 播放 [%%b]
  27. rem 自行设置播放器
  28. mpv --window-minimized "%folder%\%%b"
  29. >>"%folder%\list.txt" echo %%b
  30. set /a n-=1,1/n 2>nul || exit
  31. )
复制代码
bat小白,请多指教!谢谢!

TOP

回复 11# thp2008


%date:~0,4%%date:~5,2%%date:~8,2%不一定能解决,原因参考:
http://bbs.bathome.net/thread-3328-1-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

期待实测通过的版本

TOP

如果设置个播放器都不愿意动动手,要不配个秘书吧...
bat小白,请多指教!谢谢!

TOP

返回列表