1

これは少し紛らわしいので、説明しようと思います。(ところで、私はWindows 7 PCを使用しています)。

私は大好きな番組を見て育ち、何年にもわたって多くの番組を外付けハードドライブにダウンロードしました。Windows Media Playerを使用して、各番組のランダムなエピソードを再生する方法を探していましたが、何も見つからなかったようです。

数か月前、誰かが私が望んでいることをほぼ正確に実行するバッチスクリプトを作成することで私を助けてくれましたが、私の番組のランダムなエピソードを再生していないようです。

たとえば、ドライブにXのショーがあるとします(たとえば、シンプソンズ、評論家、ビルナイ、ガーフィールド、バットマンなど)。

これらの番組のそれぞれに、Xのエピソードがあります(たとえば、シンプソンズには85のエピソード、評論家には24のエピソード、ビルナイには100のエピソード、ガーフィールドには64のエピソードなどがあります)。

スクリプトがSimpsonsフォルダーを調べ、ランダムなエピソードを1つ選び、Criticフォルダーに移動し、ランダムなエピソードを1つ選び、BillNyeフォルダーに移動する方法を探していました。

これがすべて私のショーを通過して完了すると、プレイリストファイルが出力されます。したがって、私がしなければならないのは、視聴する各エピソードを手動で選択するのに長い時間を費やす代わりに、プレイリストをWindowsMediaPlayerにロードすることだけです。

ええと、数ヶ月前に誰かが私のためにこれを書いたのですが、数週間のテストの後、最後のプレイリストから同じエピソードのいくつかを繰り返しているように見えるので、それは本当にランダムではないようです。(一部のフォルダーには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

バリカウント.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 に答える