1

这有点令人困惑,所以我将尝试解释..(顺便说一句,我使用的是 Windows 7 pc)。

我是看我喜欢的节目长大的,多年来我把很多节目下载到我的外置硬盘上。我一直在寻找一种通过 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++,但我很难过。我只知道基础知识,但如果有人能帮助我~我会永远欠你的。

如果有人有任何问题,我会很乐意尽快回复~再次感谢^_^

4

1 回答 1

0

我认为这里需要进行一些测试:)

这是获取随机数的替代方法

%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显示的平均数字略高(如您所料),所以也许值得尝试我的版本,看看它是否更好。

显然,您必须多次执行此操作才能获得任何实际结果,但如果您有时间,这可能是值得的。

于 2013-01-21T11:02:24.687 回答