这有点令人困惑,所以我会尝试解释..(顺便说一句,我使用的是 Windows 7 电脑)。
我是看着自己喜欢的节目长大的,多年来我将许多节目下载到我的外部硬盘上。我一直在寻找一种通过 Windows Media Player 播放每个节目的随机剧集的方法,但我似乎找不到任何东西。
几个月前,有人帮助我编写了一个批处理脚本,该脚本几乎完全符合我的要求,但它似乎没有为我的节目播放随机剧集。
例如,假设我的驱动器中有 X 个节目(例如,《辛普森一家》、《评论家》、《比尔奈》、《加菲猫》、《蝙蝠侠》等)
在每个节目中,都有 X 集(例如《辛普森一家》有 85 集,《评论家》24 集,《比尔尼》100 集,《加菲猫》64 集等。)
我正在寻找一种方法,以便脚本将查看 Simpsons 文件夹,然后选择 1 个随机剧集,然后转到 Critic 文件夹,选择 1 个随机剧集,然后转到 BillNye 文件夹,依此类推。
当这一切完成后,浏览我的所有节目,它会输出一个播放列表文件。因此,我所要做的就是将播放列表加载到我的 Windows Media Player 中,而不是花费很长时间手动挑选要观看的每一集。
嗯,几个月前有人为我写了这个,但经过几周的测试,它似乎并不是真正随机的,因为它似乎重复了上一个播放列表中的一些相同的剧集。 (有些文件夹有超过 100 个节目,所以我无法理解为什么它仍然会播放同一集,如果它试图随机的话)
我试图联系那个人,但我失去了联系,如果有人可以帮助我......^_^
这是这个脚本:
SET extensionList=avi mp4 mkv
SET cnt=0
:Loop
SET /A cnt+=1
IF EXIST %cnt%.m3u GOTO Loop
>%cnt%.m3u ECHO.#EXTM3U
FOR /D %%a IN (c:\testing\*) DO CALL :PickFile "%%a"
GOTO :EOF
:PickFile
SET searchList=
FOR %%b IN (%extensionList%) DO CALL SET searchList=%%searchList%% "%~1\*.%%b"
FOR /F %%b IN ('2^>NUL DIR /A-D-H-S %searchList% ^| FIND "File(s)"') DO SET limit=%%b
SET /A fileNum=(%random% %% limit) + 1
FOR /F "tokens=2 delims=:" %%b IN ('2^>NUL DIR /A-D-H-S/B %searchList% ^| FINDSTR /N ".*" ^| FINDSTR "^%fileNum%:"') DO ^
CALL :AddList %1 "%%b" >>%cnt%.m3u
GOTO :EOF
:AddList
@ECHO.#EXTINF:-1,%~n2
@ECHO.%~f1\%~2
@GOTO :EOF
在此脚本中,它会针对我希望单击的每 X 次输出一个 *.m3u 文件 X 次。
这个脚本的问题是,它似乎在某些节目中重复某些剧集,我想知道是否可以稍微修改一下,以便它可以真正随机,或者一种方法,使最后一集不会在下一个播放列表中再次重复?
希望我没有让任何人感到困惑,而且我对编程了解不多。几年前,我在高中时尝试学习 C++,但经历了一段艰难的时期。我只知道基础知识,但如果有人能帮助我〜我将永远感激你。
如果有人有任何问题我会尽快回复~再次感谢^_^
我认为这里需要一些测试:)
这是获取随机数的替代方法
%random% * 10 / 32768 + 1
经过几次运行后,我发现它的平均值确实比您正在运行的版本稍好。
为了测试,我为每个版本执行了 1000 次
塔米脚本
setlocal enabledelayedexpansion
for /l %%a in (1,1,1000) do (
call :RAND
echo !num! >>tammy.txt
)
:RAND
set /a num=(%random% %% 10) + 1
巴厘岛脚本
setlocal enabledelayedexpansion
for /l %%a in (1,1,1000) do (
SET /A num=!random! * 10 / 32768 + 1
echo !num! >>bali.txt
)
然后,计算每个数字出现的次数(本例中为 1-10)
for /l %%a in (1,1,10) do (
find /c "%%a" tammy.txt
) >>tammycount.txt
for /l %%b in (1,1,10) do (
find /c "%%b" bali.txt
) >>balicount.txt
然后比较结果
tammycount.txt
---------- R2.TXT: 203
---------- R2.TXT: 103
---------- R2.TXT: 82
---------- R2.TXT: 101
---------- R2.TXT: 95
---------- R2.TXT: 87
---------- R2.TXT: 107
---------- R2.TXT: 118
---------- R2.TXT: 104
---------- R2.TXT: 99
balicount.txt
---------- R.TXT: 201
---------- R.TXT: 90
---------- R.TXT: 91
---------- R.TXT: 101
---------- R.TXT: 108
---------- R.TXT: 97
---------- R.TXT: 101
---------- R.TXT: 105
---------- R.TXT: 106
---------- R.TXT: 106
如您所见,
balicount
显示的平均数字稍高一些(如您所料),因此也许值得尝试我的版本,看看它是否更好。
显然,您必须多次执行此操作才能获得真正的结果,但如果您有时间,可能值得这样做。
在 Windows 上,如果您有 cygwin,则可以使用 linux 命令。我刚刚将视频剪辑文件放入目录中 并使用 dos 命令 dir 和 linux 命令 shuf
创建一个简单的 m3u 文件简单的顺序:
V:\Videoklip>dir /b > list.m3u
V:\Videoklip>cat list.m3u
list.m3u
Pharrell Williams - Happy.webm
Madonna - Frozen.mp4
Showaddywaddy - Under The Moon Of Love.webm
Yolanda Be Cool DCUP - We No Speak Americano.mp4
随机顺序
V:\Videoklip>dir /b | shuf > list.m3u
V:\Videoklip>cat list.m3u
Yolanda Be Cool DCUP - We No Speak Americano.mp4
Showaddywaddy - Under The Moon Of Love.webm
Pharrell Williams - Happy.webm
list.m3u
Madonna - Frozen.mp4
这个方法不是那么优雅,但是很简单。 cmd 控制台有自己的字符代码,因此非 ANSI 字符会出现问题。 dir 命令将 m3u 列表名称本身(示例中的 list.m3u)创建到列表中。如果您可以忍受这些不便,这是一个快速解决方案。