2

プレイリストを作成するための小さなバッチ ファイル プログラムをまとめました。

@echo off
DIR /S /o:n /b *.avi > Playlist.m3u

これを変更して、実行するたびにランダムな順序でソートする方法はありますか?

4

3 に答える 3

1

それはできますが、きれいではありません!バッチ ファイルの代わりに、より優れたプラットフォームを使用できますか? これは、Powershell を学ぶために待ち望んでいたチャンスかもしれません。:-)

ただし、バッチを主張する場合は、次の一般的なアプローチを試してみてください。

  1. フォルダー内の .avi ファイルの数を数えます。
  2. 0 からこの数値までの乱数を選択します。たとえば、set /a randomLineNum=%random% %% 10%randomLineNum% を 0 から 9 の数値に設定します。
  3. のようなものを使用for /f "skip=%randomLineNum%" %%L in ('dir /s /o:n /b *.avi') ...して、そのランダムな線をつかみecho %%L > Playlist.m3uます。
  4. #2に戻ります。

その単純なアプローチでは重複が発生するため、ループから抜け出す方法は何も構築しませんでした。これらの問題は、あなたが解決する (または将来の質問で尋ねる) ままにしておきます。:-)

于 2013-03-22T04:55:20.330 に答える
0
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
::
:: establish a tempfile name
::
:temploop
SET tempfile="%temp%\temp%random%.tmp"
IF EXIST %tempfile% GOTO temploop
::
:: Write the list of filenames with each
:: prefixed by a random number and a colon
::
(FOR /f "delims=" %%i IN (
  'dir /s/b *.avi'
 ) DO ECHO !random!:%%i
)>%tempfile% 
::
:: Write the playlist.
:: sort the tempfile (which places it 
:: in random order) and remove the number:
::
(FOR /f "tokens=1*delims=:" %%i IN (
  ' sort ^<%tempfile% ') DO ECHO %%j
) >playlist.m3u
::
:: and delete the tempfile.
::
DEL %tempfile% 2>NUL

動作するはずですが、ファイル/パス名に次のものが含まれていると問題が発生します!

コード内のドキュメント。

于 2013-03-22T05:59:21.740 に答える
0

TEMP ファイルを使用しないソリューション:

@echo off &setlocal
set "playlist=Playlist.m3u"
del %playlist% 2>nul
set /a files=0
for %%i in (*.avi) do set /a files+=1
if %files% equ 0 (echo No AVI found&goto:eof) else echo %files% AVI's found.
set /a cnt=%files%-1
for /l %%i in (0,1,%cnt%) do for /f "delims=" %%a in ('dir /b /a-d *.avi^|more +%%i') do if not defined $avi%%i set "$avi%%i=%%a"
:randomloop
set /a rd=%random%%%%files%
call set "avi=%%$avi%rd%%%"
if not defined avi goto :randomloop
set "$avi%rd%="
>>%playlist% echo %avi%
set /a cnt-=1
if %cnt% geq 0 goto:randomloop
echo Done!
endlocal

これは DelayedExpansion を使用しないため、名前に感嘆符が含まれるファイルを処理できます。もう少し時間がかかりますが、一時ファイルも必要ありません。

于 2013-03-22T09:11:59.377 に答える