フォルダー内のファイルをランダムに選択するにはどうすればいいですか?

フォルダー内のファイルをランダムに選択するにはどうすればいいですか?

Windows のコマンド ライン バッチ スクリプト (PowerShell なし) を使用して、フォルダー (およびオプションでサブフォルダー) から *.mp4 などの特定の種類のファイルをランダムに選択しようとしています。

ファイルのフルパスは、後で使用するために環境変数に保存する必要があります。

どうすればこれを実現できるでしょうか?

答え1

フォルダー内のファイルをランダムに選択するにはどうすればいいですか?

次のバッチファイルを使用します。

@echo off
setlocal
setlocal EnableDelayedExpansion
rem store the matching file names in list
dir /b *.txt /s 2> nul > files
rem count the match files
type files | find "" /v /c > tmp & set /p _count=<tmp 
rem get a random number between 0 and count-1
set /a _random=%random%*(%_count%)/32768
rem we can't skip 0 lines
if %_random% equ 0 (
  for /f "tokens=*" %%i in ('type files') do (
    set _randomfile=%%i
    echo !_randomfile!
    goto :eof
    )
) else (
  for /f "tokens=* skip=%_random%" %%i in ('type files') do (
    set _randomfile=%%i
    echo !_randomfile!
    goto :eof
    )
)

環境変数には!_randomfile!ランダムなファイルのファイル名が含まれます。

ノート:

  • /sサブフォルダー内のファイルを一致させたくない場合は削除します。
  • 0=< %RANDOM%<32767なので、一致するファイルが複数ある場合は機能しません32766

参考文献

  • Windows CMD コマンドラインの AZ インデックス- Windows コマンド ラインに関連するあらゆることに関する優れたリファレンス。
  • 探す- ファイル内のテキスト文字列を検索し、見つかったすべての行を表示します。
  • /fの場合- 別のコマンドの結果に対してコマンドをループします。
  • ランダム- Windows CMD シェルには、%RANDOM%乱数を生成するために使用できる と呼ばれる動的変数が含まれています。

関連情報